अधिकांश एपीएल प्रतीकों के साथ, ⍉
अलग-अलग अर्थ होते हैं जब एक तर्क (ट्रांसपोज़) बनाम दो तर्कों (डायैडिक ट्रांज़ोज़ / रीऑर्डर आयाम) के साथ कहा जाता है। यह चुनौती उत्तरार्द्ध की चिंता करती है, जो numpy.moveaxis
पायथन या permute
MATLAB में समान रूप से कार्य करता है , लेकिन अधिक शक्तिशाली है।
order ⍉ A
जब order
अलग प्रविष्टियाँ हैं
जब सभी सदस्य order
अलग-अलग होते हैं, तो order ⍉ A
इसके बराबर होता है:
numpy.moveaxis(A, tuple(range(len(A.shape)), order)
पायथन में, याpermute(A,order)
MATLAB में। बाद के प्रलेखन से उद्धरण :
बी = परमिट (ए, ऑर्डर) ए के आयामों को फिर से व्यवस्थित करता है ताकि वे वेक्टर क्रम द्वारा निर्दिष्ट क्रम में हों। परिणामी सरणी B में A के समान मान हैं, लेकिन किसी विशेष तत्व तक पहुंचने के लिए आवश्यक सब्सक्राइबर्स के ऑर्डर को ऑर्डर द्वारा निर्दिष्ट के रूप में फिर से व्यवस्थित किया गया है।
उदाहरण के लिए, मान लीजिए 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
लिए एक विकर्ण टुकड़ा लेता B
है B[x0,x1] = A[x0,x0,x1]
। ध्यान दें कि B
एक 2x4 सरणी है: यदि यह 3x4 था, तो हमें यह निर्धारित B[2, x1] = A[2, 2, x1]
करना होगा कि कौन सी सीमा से बाहर होगा A
। सामान्य तौर पर k
वें का आयाम ऐसे B
सभी का न्यूनतम होगा ।A.shape[i]
order[i] = k
उदाहरण
डाइएडिक संक्रमण पर विचार करें order⍉A
जहां order = [2, 1, 0]
और ए 3x4x5 है
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-आयामी आकार -3 सरणी B = [0, 26, 52]
ताकिB[1] = B[x0] = A[x0,x0,x0] = A[1,1,1] = 26
इनपुट
यहां हम 0-इंडेक्सिंग का उपयोग करते हैं, लेकिन आप एपीएल डिफ़ॉल्ट के रूप में 1-इंडेक्सिंग का भी उपयोग कर सकते हैं।
एक बहुआयामी या नेस्टेड सरणी
A
, आयाम के n ≥ 1।एन पॉजिटिव पूर्णांक
order
की एक सूची जिसमें पूर्णांक {0,1, ..., k} (या {1, ..., k + 1} के लिए 1-इंडेक्स) कुछ k < n के लिए , किसी भी क्रम में, संभवतः पुनरावृत्ति के साथ।
उत्पादन
- एक बहुआयामी या नेस्टेड सरणी जो उन तर्कों के साथ डायडिक ट्रांज़ोज़ को लागू करने के परिणाम का प्रतिनिधित्व करता है। (आउटपुट में आयाम k + 1 होगा ।)
आप मेटा पर वर्तमान मानक द्वारा अनुमत के रूप में एक पूर्ण कार्यक्रम, फ़ंक्शन, आदि लिख सकते हैं।
यदि आपकी भाषा में एक बिलिन है, तो यह एक दिलचस्प उत्तर के लिए बिलिन के बिना एक समाधान भी लिखने के लिए प्रोत्साहित किया जाता है।
परीक्षण के मामलों
संदर्भ पायथन कार्यान्वयन जल्द ही आ रहा है।
परीक्षण मामलों को पढ़ने के लिए ध्यान दें: एपीएल में, एक सरणी के स्तंभ और अंतिम अक्ष स्तंभ और पंक्तियों के साथ हैं।
⍉
जो उल्टे अक्ष सूचक का उपयोग डिफ़ॉल्ट के रूप में करता है, ऐसा ⍉A
ही है जैसे (2 1 0)⍉A
कि A
3-आयामी सरणी है और सामान्य रूप में ⍉A
है (⌽⍳≢⍴A)⍉A
।
[number-of-dimensions,first-dimension-length,second-dimension-length,…,last-dimension-length,first-element,second-element,…,last-element]
।
⍉
पी