4,499
edits
m (Text replacement - "</source>" to "</syntaxhighlight>") |
m (Text replacement - "<source" to "<syntaxhighlight") |
||
Line 5: | Line 5: | ||
== Rectangular indexing == | == Rectangular indexing == | ||
'''Rectangular indexing''' selects indices along each [[axis]] of a given array. This indexing mode is usually implemented as [[Bracket indexing]] < | '''Rectangular indexing''' selects indices along each [[axis]] of a given array. This indexing mode is usually implemented as [[Bracket indexing]] <syntaxhighlight lang=apl inline>X[Y]</syntaxhighlight> and [[Index (function)|Squad indexing]] <syntaxhighlight lang=apl inline>Y⌷X</syntaxhighlight>. Rectangular indexing has an important property: If rectangular indexing is applied to a [[matrix]], the elements at four corners of a rectangle still form a rectangle in the result. This property generalizes to four elements of a higher-[[rank]] array for that share an index over all but two axes. | ||
< | <syntaxhighlight lang=apl> | ||
⎕←mat←10⊥¨⍳3 4 | ⎕←mat←10⊥¨⍳3 4 | ||
11 12 13 14 | 11 12 13 14 | ||
Line 25: | Line 25: | ||
For implementations that support [[leading axis theory]], it is common to select [[cell|cells]] or especially [[major cell|major cells]] of an array. In these implementations, [[Index (function)|Squad]] can be used with short left [[argument]] so that the omitted trailing axes can be selected as-is. A few implementations also support [[Select]], the primitive dedicated to selecting major cells. | For implementations that support [[leading axis theory]], it is common to select [[cell|cells]] or especially [[major cell|major cells]] of an array. In these implementations, [[Index (function)|Squad]] can be used with short left [[argument]] so that the omitted trailing axes can be selected as-is. A few implementations also support [[Select]], the primitive dedicated to selecting major cells. | ||
< | <syntaxhighlight lang=apl> | ||
(⊂1 1 2)⌷mat | (⊂1 1 2)⌷mat | ||
11 12 13 14 | 11 12 13 14 | ||
Line 34: | Line 34: | ||
=== Replicate as a special case === | === Replicate as a special case === | ||
Various forms of [[Replicate]] can be used to select one or more indices over a single axis. < | Various forms of [[Replicate]] can be used to select one or more indices over a single axis. <syntaxhighlight lang=apl inline>X/Y</syntaxhighlight> applies to the last axis, <syntaxhighlight lang=apl inline>X⌿Y</syntaxhighlight> to the first, and <syntaxhighlight lang=apl inline>X/[K]Y</syntaxhighlight> applies to the K-th axis. All the other axes are kept intact. The main difference from other indexing primitives is that X does not specify the indices; instead, it specifies how many copies of the corresponding indices to include in the result. | ||
< | <syntaxhighlight lang=apl> | ||
2 1 0⌿mat | 2 1 0⌿mat | ||
11 12 13 14 | 11 12 13 14 | ||
Line 47: | Line 47: | ||
'''Non-rectangular indexing''' selects multi-dimensional indices from the entire array. This only works with [[nested array model]] because the index specification must contain [[vector|vectors]] as its elements. A few APL implementations support this form of indexing as [[Bracket indexing#Choose indexing|a mode of Bracket indexing]]. | '''Non-rectangular indexing''' selects multi-dimensional indices from the entire array. This only works with [[nested array model]] because the index specification must contain [[vector|vectors]] as its elements. A few APL implementations support this form of indexing as [[Bracket indexing#Choose indexing|a mode of Bracket indexing]]. | ||
< | <syntaxhighlight lang=apl> | ||
mat[2 2⍴(1 1)(2 2)(1 3)(2 4)] | mat[2 2⍴(1 1)(2 2)(1 3)(2 4)] | ||
11 22 | 11 22 | ||
Line 57: | Line 57: | ||
In [[nested array model]], a need to access items through layers of nesting arises. '''Deep indexing''' uses a vector of indices over multiple layers to fetch a deeply nested item. This mode of indexing is supported by [[Pick]], and as [[Bracket indexing#Reach indexing|a mode of Bracket indexing]] in a few implementations. | In [[nested array model]], a need to access items through layers of nesting arises. '''Deep indexing''' uses a vector of indices over multiple layers to fetch a deeply nested item. This mode of indexing is supported by [[Pick]], and as [[Bracket indexing#Reach indexing|a mode of Bracket indexing]] in a few implementations. | ||
< | <syntaxhighlight lang=apl> | ||
⎕←G←2 3⍴('ABC' 1)('DEF' 2)('GHI' 3)('JKL' 4)('MNO' 5)('PQR' 6) | ⎕←G←2 3⍴('ABC' 1)('DEF' 2)('GHI' 3)('JKL' 4)('MNO' 5)('PQR' 6) | ||
┌───────┬───────┬───────┐ | ┌───────┬───────┬───────┐ |