Indices: Difference between revisions

From APL Wiki
Jump to navigation Jump to search
Miraheze>Marshall
(Created page with "''This function describes a primitive whose result is a list of indices. See Index for the page on indices themselves.'' Indices (<code>⍸</code>), or Where, is a mona...")
 
Miraheze>Marshall
Line 14: Line 14:
{{Works in|[[Dyalog APL]],[[dzaima/APL]],[[NARS2000]]}}
{{Works in|[[Dyalog APL]],[[dzaima/APL]],[[NARS2000]]}}


In [[nested]] APLs it returns nested indices when passed a [[matrix]] or higher-dimensional array.
In [[Nested array model|nested]] APLs it returns nested indices when passed a [[matrix]] or higher-dimensional array.
<source class=apl>
<source class=apl>
       ⍸ 3 3⍴0 0 1 0 0 0 1 0
       ⍸ 3 3⍴0 0 1 0 0 0 1 0

Revision as of 14:27, 24 October 2019

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

Dyalog

NARS2000

J Dictionary, NuVoc

Other resources

APL Cultivation