Çoğu APL sembolünde olduğu gibi, ⍉bir argümanla (devrik) çağrıldığında iki argümanla (ikili devrik / yeniden sıralama boyutları) çağrıldığında farklı anlamlar vardır. Bu zorluk numpy.moveaxis, Python veya permuteMATLAB'da benzer şekilde hareket eden ancak daha güçlü olan ikincisi ile ilgilidir .
order ⍉ Ane zaman orderfarklı girişler var
Tüm üyeleri orderfarklı olduğunda order ⍉ A, şuna eşittir:
numpy.moveaxis(A, tuple(range(len(A.shape)), order)Python'da veyapermute(A,order)MATLAB. İkincisinin belgelerinden alıntı :
B = permute (A, order), A'nın boyutlarını vektör sırası tarafından belirtilen sırada olacak şekilde yeniden düzenler. Elde edilen B dizisi A ile aynı değerlere sahiptir, ancak herhangi bir belirli öğeye erişmek için gereken aboneliklerin sırası, siparişte belirtildiği gibi yeniden düzenlenir.
Örneğin, diyelim Aki bir 3B dizi ve diyelim B ← (2 0 1)⍉A. O zaman B öyle ki B[x0,x1,x2] = A[x2,x0,x1], herkes içinx2,x0,x1
order ⍉ Aordertekrarlanan girişler ne zaman
orderTekrarlanan girişler olduğunda , dizinin çapraz dilimini alırız. Örneğin, A 2x3x4 dizisi olsun. böyle B ← (0 0 1)⍉Açapraz bir dilim Aoluşturur . Bir 2x4 dizisi olduğunu unutmayın : 3x4 olsaydı, sınırlarının dışında olacağını ayarlamamız gerekirdi . Genel olarak bunun boyutu , tüm bu boyutların en azı olacaktır .BB[x0,x1] = A[x0,x0,x1]BB[2, x1] = A[2, 2, x1]AkBA.shape[i]order[i] = k
Misal
A'nın 3x4x5 order⍉Aolduğu ikili order = [2, 1, 0]devri düşünün
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]]]
Sonuç 5x4x3 dizisi 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]]]
Örneğin, (x0, x1, x2) = (4,1,2) 'e sahip olduğumuzu unutmayın B[x0,x1,x2] = A[x2, x1, x0] = A[2,1,4] = 49.
Bunun yerine order = [0, 0, 0]ve Ayukarıdaki gibi, o zaman çıktı B1 boyutlu boyut-3 dizi olacaktı B = [0, 26, 52]kiB[1] = B[x0] = A[x0,x0,x0] = A[1,1,1] = 26
Giriş
Burada 0-endeksleme kullanıyoruz, ancak APL varsayılanı olarak 1-endeksleme de kullanabilirsiniz.
N ≥ 1
Aboyutunda çok boyutlu veya iç içe dizi .Bir liste
orderait n tamsayılar oluşan pozitif tamsayılar {0,1, ..., k} (veya {1, ..., k + 1} 1-endeksi için) bazıları için k < n muhtemelen herhangi bir sırada, tekrarlamalarla.
Çıktı
- Bu argümanlarla ikili dönüşümün uygulanmasının sonucunu temsil eden çok boyutlu veya iç içe dizi. (Çıktı k + 1 boyutuna sahip olacaktır .)
Mevcut standardın metada izin verdiği şekilde tam bir program, işlev vb. Yazabilirsiniz.
Dilinizde bir yerleşik varsa, ilginç bir cevap uğruna yerleşik olmadan bir çözüm yazmanız da önerilir.
Test senaryoları
Referans Python uygulaması yakında.
Test senaryolarını okumak için not: APL'de, bir dizinin sondan bir önceki ve son eksenleri bu sırayla sütunlar ve satırlar boyunca bulunur.
⍉, böylece varsayılan olarak ters eksen indisleri kullanan ⍉Aaynı (2 1 0)⍉Aise Abir 3-boyutlu bir dizidir ve genel olarak ⍉Aise (⌽⍳≢⍴A)⍉A.
[number-of-dimensions,first-dimension-length,second-dimension-length,…,last-dimension-length,first-element,second-element,…,last-element].
⍉P