Indices
This function describes a primitive whose result is a list of indices. See Index for the page on indices themselves.
Indices (⍸
), or Where, is a monadic primitive function which returns the indices of all ones in a boolean array. More generally, Indices accepts an array of non-negative integers and copies each index the corresponding number of times.
Indices was introduced in J as I.
and is present in K as &
.
Examples
In all implementations, Indices gives the indices of ones in a boolean vector.
⍸ 0 0 1 0 0 0 1 0 3 7
In nested APLs it returns nested indices when passed a matrix or higher-dimensional array.
⍸ 3 3⍴0 0 1 0 0 0 1 0 ┌───┬───┐ │1 3│3 1│ └───┴───┘ ⍸ 1 ⍝ An index into a scalar is empty! ┌┐ ││ └┘
If numbers higher than 1 are allowed, they indicate that the index of the number is repeated. Negative numbers are never allowed.
⍸ 3 0 2 1 1 1 3 3
Description and APL model
Indices replicates each index in the argument by the number of times it appears. It is identical to the APL function:
Where ← {(,⍵)⌿,⍳⍴⍵}
The argument is restricted to be an array of non-negative integers, or, in Dyalog APL, booleans.
The only flat array language which implements Indices is J. Because J's iota does not return multidimensional indices, J defines Indices to have function rank 1 so that only vector indices are used.
Mathematical interpretation
Indices may be viewed as a way to convert between two ways of writing multisets of array indices. The argument uses a dense representation indicating for each index the number of times it appears, and the result uses a sparse representation which lists all the indices contained in the set.
Documentation
J Dictionary, NuVoc