Reverse

From APL Wiki
Revision as of 14:39, 1 November 2019 by Miraheze>Marshall (Created page with "{{Primitive|⌽ ⊖|Reverse}} is a monadic function which reorders elements of the argument to go in the opposite direction along a specified axis. The name Revers...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Template:Primitive is a monadic function which reorders elements of the argument to go in the opposite direction along a specified axis. The name Reverse is typically used for the primitive , which reverses along the last axis, while , which reverses along the first axis, is called "Reverse First", "Reverse-down", or similar. In APLs with function axis, either for may use a specified axis which overrides this default choice of axis. In the leading axis model, specifying an axis is discouraged in favor of using with the Rank operator.

Examples

Reverse flips a matrix horizontally, changing elements to go right to left, and Reverse First flip vertically, so the elements are reordered top to bottom.

      x ← 10 20 30 ∘.+ ⍳6
      x
11 12 13 14 15 16
21 22 23 24 25 26
31 32 33 34 35 36
      ⌽x
16 15 14 13 12 11
26 25 24 23 22 21
36 35 34 33 32 31
      ⊖x
31 32 33 34 35 36
21 22 23 24 25 26
11 12 13 14 15 16

Since a vector only has one axis, any form of Reverse will reverse along this axis.

      ⌽ 'Backwards text'
txet sdrawkcaB
      ⊖⌽ 'Backwards text'       ⍝ One reverse undoes the other
Backwards text

Reverse with a specified axis can reverse along any of the three dimensions of the array below.

      ⊢a←2 3 6⍴⍳36
 1  2  3  4  5  6
 7  8  9 10 11 12
13 14 15 16 17 18

19 20 21 22 23 24
25 26 27 28 29 30
31 32 33 34 35 36
      (⌽[1]a)(⌽[2]a)(⌽[3]a)
┌─────────────────┬─────────────────┬─────────────────┐
│19 20 21 22 23 24│13 14 15 16 17 18│ 6  5  4  3  2  1│
│25 26 27 28 29 30│ 7  8  9 10 11 12│12 11 10  9  8  7│
│31 32 33 34 35 36│ 1  2  3  4  5  6│18 17 16 15 14 13│
│                 │                 │                 │
│ 1  2  3  4  5  6│31 32 33 34 35 36│24 23 22 21 20 19│
│ 7  8  9 10 11 12│25 26 27 28 29 30│30 29 28 27 26 25│
│13 14 15 16 17 18│19 20 21 22 23 24│36 35 34 33 32 31│
└─────────────────┴─────────────────┴─────────────────┘

The Rank operator can also be used to reverse along a particular axis. While Rank has no effect on Reverse (last), Reverse First with rank k reverses the first axis of each k-cell, or the 1+r-k'th axis of a rank-r array.

      ⌽⍤2⊢a                     ⍝ Same as ⌽
 5  4  3  2  1  0
11 10  9  8  7  6
17 16 15 14 13 12

23 22 21 20 19 18
29 28 27 26 25 24
35 34 33 32 31 30
      ⊖⍤2⊢a                    ⍝ Same as ⌽[2]
12 13 14 15 16 17
 6  7  8  9 10 11
 0  1  2  3  4  5

30 31 32 33 34 35
24 25 26 27 28 29
18 19 20 21 22 23
      (⊖⍤3⊢a)(⊖⍤2⊢a)(⊖⍤1⊢a)
┌─────────────────┬─────────────────┬─────────────────┐
│19 20 21 22 23 24│13 14 15 16 17 18│ 6  5  4  3  2  1│
│25 26 27 28 29 30│ 7  8  9 10 11 12│12 11 10  9  8  7│
│31 32 33 34 35 36│ 1  2  3  4  5  6│18 17 16 15 14 13│
│                 │                 │                 │
│ 1  2  3  4  5  6│31 32 33 34 35 36│24 23 22 21 20 19│
│ 7  8  9 10 11 12│25 26 27 28 29 30│30 29 28 27 26 25│
│13 14 15 16 17 18│19 20 21 22 23 24│36 35 34 33 32 31│
└─────────────────┴─────────────────┴─────────────────┘

Reversing a scalar has no effect: there are no axes to reverse along.

      ⌽1.1
1.1

External links

Lessons

Documentation