From eb01eb415a5304d98c55f844188bb0defac90c67 Mon Sep 17 00:00:00 2001 From: Marshall Lochbaum Date: Fri, 17 Jul 2020 12:04:34 -0400 Subject: Character entity escaping for "&<> --- docs/transpose.html | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'docs/transpose.html') diff --git a/docs/transpose.html b/docs/transpose.html index 9267c167..eaedcdb0 100644 --- a/docs/transpose.html +++ b/docs/transpose.html @@ -2,7 +2,7 @@

Transpose

As in APL, Transpose () is a tool for rearranging the axes of an array. BQN's version is tweaked to align better with the leading axis model and make common operations easier.

Monadic Transpose

-

Transposing a matrix exchanges its axes, mirroring it across the diagonal. APL extends the function to any rank by reversing all axes, but this generalization isn't very natural and is almost never used. The main reason for it is to maintain the equivalence a MP b ←→ a MP b, where MP (+´<˘)×1 is the generalized matrix product. But even here APL's Transpose is suspect. It does much more work than it needs to, as we'll see.

+

Transposing a matrix exchanges its axes, mirroring it across the diagonal. APL extends the function to any rank by reversing all axes, but this generalization isn't very natural and is almost never used. The main reason for it is to maintain the equivalence a MP b ←→ a MP b, where MP (+´<˘)×1 is the generalized matrix product. But even here APL's Transpose is suspect. It does much more work than it needs to, as we'll see.

BQN's transpose takes the first axis of its argument and moves it to the end.

     a23456  23456
 [ 2 3 4 5 6 ]
@@ -11,7 +11,7 @@
 

On the argument's ravel, this looks like a simple 2-dimensional transpose: one axis is exchanged with a compound axis made up of the other axes. Here we transpose a rank 3 matrix:

    a322  322⥊↕12
-    < a322
+    < a322
 
            
      0  1     0 4  8
@@ -26,7 +26,7 @@
                        
 

But, reading in ravel order, the argument and result have exactly the same element ordering as for the rank 2 matrix ˘ a322:

-
    < ˘ a322
+
    < ˘ a322
 
                
     0 1  2  3     0 4  8
@@ -43,7 +43,7 @@
 [ 6 2 3 4 5 ]
 

In fact, we have ≢⍉k a ←→ k⌽≢a for any number k and array a.

-

To move axes other than the first, use the Rank operator in order to leave initial axes untouched. A rank of k>0 transposes only the last k axes while a rank of k<0 ignores the first |k axes.

+

To move axes other than the first, use the Rank operator in order to leave initial axes untouched. A rank of k>0 transposes only the last k axes while a rank of k<0 ignores the first |k axes.

     3 a23456
 [ 2 3 5 6 4 ]
 
@@ -79,10 +79,10 @@
     2  a23456  # Restrict Transpose to the first three axes
 [ 3 4 2 5 6 ]
 
-

Finally, it's worth noting that, as monadic Transpose moves the first axis to the end, it's equivalent to dyadic Transpose with a "default" left argument: (≢-1˜).

+

Finally, it's worth noting that, as monadic Transpose moves the first axis to the end, it's equivalent to dyadic Transpose with a "default" left argument: (≢-1˜).

Definitions

Here we define the two valences of Transpose more precisely.

A non-array right argument to Transpose is always boxed to get a scalar array before doing anything else.

Monadic transpose is identical to (≢-1˜), except that for scalar arguments it returns the array unchanged rather than giving an error.

-

In Dyadic transpose, the left argument is a number or numeric array of rank 1 or less, and 𝕨≠≢𝕩. Define the result rank r(≠≢𝕩)-+´¬∊𝕨 to be the argument rank minus the number of duplicate entries in the left argument. We require ´𝕨<r. Bring 𝕨 to full length by appending the missing indices: 𝕨𝕨(¬˜/⊢)r. Now the result shape is defined to be ´¨𝕨⊔≢𝕩. Element iz of the result z is element (𝕨i)𝕩 of the argument.

+

In Dyadic transpose, the left argument is a number or numeric array of rank 1 or less, and 𝕨≠≢𝕩. Define the result rank r(≠≢𝕩)-+´¬∊𝕨 to be the argument rank minus the number of duplicate entries in the left argument. We require ´𝕨<r. Bring 𝕨 to full length by appending the missing indices: 𝕨𝕨(¬˜/⊢)r. Now the result shape is defined to be ´¨𝕨⊔≢𝕩. Element iz of the result z is element (𝕨i)𝕩 of the argument.

-- cgit v1.2.3