ほとんどのAPLシンボル⍉
と同様に、1つの引数(転置)と2つの引数(2進転置/次元の並べ替え)で呼び出された場合の意味は異なります。この課題は後者に関係します。後者は、numpy.moveaxis
Pythonまたはpermute
MATLAB と同様に動作しますが、より強力です。
order ⍉ A
order
異なるエントリがある場合
のすべてのメンバーorder
が異なる場合order ⍉ A
は、次と同等です。
numpy.moveaxis(A, tuple(range(len(A.shape)), order)
Python、またはpermute(A,order)
MATLABで。後者のドキュメントからの引用:
B = permute(A、order)は、ベクトルの順序で指定された順序になるようにAの次元を並べ替えます。結果の配列Bの値はAと同じですが、特定の要素にアクセスするために必要な添え字の順序は、orderで指定されたとおりに再配置されます。
たとえばA
、3D配列であるとしB ← (2 0 1)⍉A
ます。そして、Bは、そのようなことであるB[x0,x1,x2] = A[x2,x0,x1]
すべてのためにx2,x0,x1
order ⍉ A
order
エントリが繰り返されたとき
order
がエントリを繰り返した場合、配列の対角スライスを取得します。たとえば、Aを2x3x4配列とします。そのようなものを作成するためにB ← (0 0 1)⍉A
斜めのスライスをとりA
ます。これは2x4の配列であることに注意してください。3x4の場合は、の範囲外を設定する必要があります。一般的に、のth次元は、そのようなすべての最小値になります。B
B[x0,x1] = A[x0,x0,x1]
B
B[2, x1] = A[2, 2, x1]
A
k
B
A.shape[i]
order[i] = k
例
Aが3x4x5 order⍉A
である2項転置を考えorder = [2, 1, 0]
ます。
A =
[[[ 0 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 37 38 39]]
[[40 41 42 43 44]
[45 46 47 48 49]
[50 51 52 53 54]
[55 56 57 58 59]]]
結果は5x4x3配列B =
[[[ 0 20 40]
[ 5 25 45]
[10 30 50]
[15 35 55]]
[[ 1 21 41]
[ 6 26 46]
[11 31 51]
[16 36 56]]
[[ 2 22 42]
[ 7 27 47]
[12 32 52]
[17 37 57]]
[[ 3 23 43]
[ 8 28 48]
[13 33 53]
[18 38 58]]
[[ 4 24 44]
[ 9 29 49]
[14 34 54]
[19 39 59]]]
とき、例えば、(X0、X1、X2)=(4,1,2)私たちが持っていることに注意してくださいB[x0,x1,x2] = A[x2, x1, x0] = A[2,1,4] = 49
。
代わりorder = [0, 0, 0]
にA
、上記のように、出力B
が1次元のsize-3配列にB = [0, 26, 52]
なるように、B[1] = B[x0] = A[x0,x0,x0] = A[1,1,1] = 26
入力
ここでは0インデックスを使用していますが、APLのデフォルトである1インデックスを使用することもできます。
多次元またはネストされた配列
A
の次元の、N ≥1。リスト
order
のN個の整数からなる正の整数{0,1、...、K}(または{1、...、K + 1} 1-インデックスの)いくつかのために、K < N、おそらく任意の順序で、繰り返しあり。
出力
- これらの引数を使用して2進転置を適用した結果を表す多次元またはネストされた配列。(出力の次元はk + 1になります。)
メタの現在の標準で許可されているように、完全なプログラム、関数などを書くことができます。
言語にビルトインがある場合は、興味深い答えを得るために、ビルトインのないソリューションも作成することをお勧めします。
テストケース
リファレンスPythonの実装は近日公開予定です。
テストケースの読み取りに関する注意:APLでは、配列の最後から2番目と最後の軸は、列と行の順に並んでいます。
⍉
、デフォルトとして逆軸インデックスを使用するものが含まれるため⍉A
、(2 1 0)⍉A
if A
が3次元配列である場合と同じであり、一般的に⍉A
は(⌽⍳≢⍴A)⍉A
です。
[number-of-dimensions,first-dimension-length,second-dimension-length,…,last-dimension-length,first-element,second-element,…,last-element]
。
⍉
P