Indexing: Difference between revisions

Jump to navigation Jump to search
180 bytes added ,  22:13, 10 September 2022
m
Text replacement - "<source" to "<syntaxhighlight"
m (Text replacement - " ⊢( *[^∘])" to " ⎕←$1")
Tags: Mobile edit Mobile web edit
m (Text replacement - "<source" to "<syntaxhighlight")
 
(One intermediate revision by the same user not shown)
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]] <source lang=apl inline>X[Y]</source> and [[Index (function)|Squad indexing]] <source lang=apl inline>Y⌷X</source>. 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.
'''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.


<source lang=apl>
<syntaxhighlight lang=apl>
       ⎕←mat←10⊥¨⍳3 4
       ⎕←mat←10⊥¨⍳3 4
11 12 13 14
11 12 13 14
Line 19: Line 19:
21 24
21 24
31 34
31 34
</source>
</syntaxhighlight>


=== Relationship to leading axis theory ===
=== Relationship to leading axis theory ===
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.


<source lang=apl>
<syntaxhighlight lang=apl>
       (⊂1 1 2)⌷mat
       (⊂1 1 2)⌷mat
11 12 13 14
11 12 13 14
11 12 13 14
11 12 13 14
21 22 23 24
21 22 23 24
</source>
</syntaxhighlight>


=== 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. <source lang=apl inline>X/Y</source> applies to the last axis, <source lang=apl inline>X⌿Y</source> to the first, and <source lang=apl inline>X/[K]Y</source> 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.
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.


<source lang=apl>
<syntaxhighlight lang=apl>
       2 1 0⌿mat
       2 1 0⌿mat
11 12 13 14
11 12 13 14
11 12 13 14
11 12 13 14
21 22 23 24
21 22 23 24
</source>
</syntaxhighlight>


== Non-rectangular indexing ==
== Non-rectangular indexing ==
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]].


<source lang=apl>
<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
13 24
13 24
</source>
</syntaxhighlight>


== Deep indexing ==
== Deep indexing ==
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.


<source lang=apl>
<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)
┌───────┬───────┬───────┐
┌───────┬───────┬───────┐
Line 72: Line 72:
       ((2 1)1 2)⊃G
       ((2 1)1 2)⊃G
K
K
</source>
</syntaxhighlight>


{{APL features}}[[Category:Arrays]]
{{APL features}}[[Category:Arrays]]

Navigation menu