⍤ — Rank
Keys: Alt-1 t
f⍤R applies f to the cells of rank R. With two arguments, f⍤R pairs cells using leading agreement of the frames. Separate a numeric argument from the rank with ⊢ or parentheses, as in -⍤0⊢5 or -⍤0(5). A vector argument goes in touching brackets, as in -⍤0[2 3]. In -⍤0 5, 0 5 is the rank. Three rules give the result:
- Inside a frame, the 0-cell at a position holding an atom is that atom. The 0-cell at a position holding an array is a scalar holding the array.
- Assembly works as for
⊃. Shorter results are padded with fill to a common shape. The shape of the whole result is the frame followed by that common shape. Each position in the frame holds the items of its result. - When no argument has a frame,
f⍤Ris the same asf. An argument has no frame when its rank is at most its cell rank. An atom never has a frame.
m←2 3⍴⍳6
+/⍤1 m ⍝ 3 12R |
Monad rank | Dyad left/right ranks |
|---|---|---|
r |
r |
r r |
q r |
r |
q r |
p q r |
p |
q r |
A negative rank counts back from the argument’s rank. With a rank at least as large as the argument’s rank, the whole argument is one cell. With an empty frame, f is called on a prototype cell. If that call fails, the result is empty, with the frame’s shape and prototype 0, as in J.
By these rules, ⊢⍤0 returns its argument unchanged. On an array of atoms, f⍤0 is ⊃f¨. Each passes the items themselves, never enclosed. Every call’s result becomes one item of Each’s result, with no assembly.
v←[[1 2] [3 4 5]]
≢⍤0 v ⍝ [1 1]ₓ
≢¨v ⍝ [2 3]ₓ
⊢⍤0v ≡ v ⍝ $t
{⍵ ⍵}⍤0[1 2] ⍝ [1 1⋄2 2]
-⍤0⊢5 ⍝ ¯5With rank ∞, the cell is the whole argument, and rank ¯∞ is rank 0. For example, ⍤1 ∞ pairs each row on the left with the whole right argument. In the examples below, (+⌿×)⍤1 ∞ is the matrix-vector product. With a matrix on the right, the same function multiplies matrices.
m←[1 2 3⋄4 5 6]
m (+⌿×)⍤1 ∞ [1 2 3] ⍝ 14 32
m (+⌿×)⍤1 ∞ [1 10⋄2 20⋄3 30] ⍝ [14 140⋄32 320]A function right operand computes the ranks from the arguments, as BQN’s ⎉ does: f⍤g Y is f⍤(g Y) Y, and X f⍤g Y is X f⍤(X g Y) Y. Axis and Stencil take a function right operand in the same way. Here each cell of Y with the rank of X pairs with X:
[1 2] +⍤{≢⍴⍺} [10 20⋄30 40] ⍝ [11 22⋄31 42]To apply a function along chosen axes, see Axis.
Inverse
(f⍤k)⁻¹ is f⁻¹⍤k.
(⌽⍤1)⁻¹[1 2⋄3 4] ⍝ [2 1⋄4 3]Errors
RANK: a rank operand that is not a unit or vectorLENGTH: a rank operand with more than three itemsDOMAIN: non-integral ranks