डायैडिक ट्रांज़ोज़


9

अधिकांश एपीएल प्रतीकों के साथ, अलग-अलग अर्थ होते हैं जब एक तर्क (ट्रांसपोज़) बनाम दो तर्कों (डायैडिक ट्रांज़ोज़ / रीऑर्डर आयाम) के साथ कहा जाता है। यह चुनौती उत्तरार्द्ध की चिंता करती है, जो numpy.moveaxisपायथन या permuteMATLAB में समान रूप से कार्य करता है , लेकिन अधिक शक्तिशाली है।

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 होगा ।)

आप मेटा पर वर्तमान मानक द्वारा अनुमत के रूप में एक पूर्ण कार्यक्रम, फ़ंक्शन, आदि लिख सकते हैं।

यदि आपकी भाषा में एक बिलिन है, तो यह एक दिलचस्प उत्तर के लिए बिलिन के बिना एक समाधान भी लिखने के लिए प्रोत्साहित किया जाता है।

परीक्षण के मामलों

टीआईओ पर परीक्षण के मामले

संदर्भ पायथन कार्यान्वयन जल्द ही आ रहा है।

परीक्षण मामलों को पढ़ने के लिए ध्यान दें: एपीएल में, एक सरणी के स्तंभ और अंतिम अक्ष स्तंभ और पंक्तियों के साथ हैं।


4
एपीएल, 1 बाइट:: पी
क्विंटेक

1
वास्तव में, कई एपीएल प्रतीक सिर्फ एक तर्क के साथ एक डिफ़ॉल्ट दूसरे तर्क का उपयोग करते हैं। इसमें शामिल है जो उल्टे अक्ष सूचक का उपयोग डिफ़ॉल्ट के रूप में करता है, ऐसा ⍉Aही है जैसे (2 1 0)⍉Aकि A3-आयामी सरणी है और सामान्य रूप में ⍉Aहै (⌽⍳≢⍴A)⍉A
10

i / o के बारे में @lirtosiast सवाल: क्या एक बहुआयामी सरणी को आकृति की एक जोड़ी (आयामों की सूची) और सामग्री (उनके सूचकांक के शाब्दिक क्रम में सभी तत्व) के रूप में दर्शाया जा सकता है?
NGN

@ng मैं अभी के लिए नहीं कहूंगा, लेकिन आपको मेटा से पूछना चाहिए कि क्या यह प्रारूप डिफ़ॉल्ट रूप से स्वीकार्य है।
1955

@lirtosiast Anecdotally, Dyalog APL आंतरिक रूप से एरेज़ को स्टोर करता है [number-of-dimensions,first-dimension-length,second-dimension-length,…,last-dimension-length,first-element,second-element,…,last-element]
एडमंड

जवाबों:


4

एपीएल (Dyalog यूनिकोड) , 34 बाइट्स SBCS

यह मेरा सहकर्मी कोड है ( रोजर हुई से थोड़ा संशोधित : 50 कार्य में एपीएल का इतिहास , अध्याय 30 ), स्पष्ट अनुमति के साथ पोस्ट किया गया।

अनाम टैसिट इन्फिक्स लाम्बा (इसे ड्रॉप-इन के रूप में इस्तेमाल किया जा सकता है )।

{⍵[(⊂⊂⍺)⌷¨,¨⍳⍺[⍋⍺]{⌊/⍵}⌸(⍴⍵)[⍋⍺]]}

इसे ऑनलाइन आज़माएं!

{} Dfn; तर्क (कुल्हाड़ियों) छोड़ दिया है, है सही तर्क (सरणी)
जैसे [2,2,1]और[[[1,2],[3,4]]]

⍵[... के ] साथ सरणी अनुक्रमणिका:

  (⍴⍵)[... ] आकार, (अक्षों की लंबाई), द्वारा अनुक्रमित:
  [1,2,2]

   ⍋⍺ कुल्हाड़ियों की ग्रेडिंग वेक्टर (सूचकांक जो उन्हें क्रमबद्ध करेगा)
   [3,1,2]
  [2,1,2]

  ⍺[⍋⍺]{... }⌸ समूह के लिए कुंजी के रूप में सॉर्ट की गई कुल्हाड़ियों का उपयोग करें, और प्रत्येक समूह के लिए:
  [1,2,2]{"1":[2],"2":[1,2]}

   {⌊/⍵} सबसे कम अक्ष की लंबाई का पता लगाएं
   {"1":2,"2":1}[2,1]

   उन आयामों के कार्टेशियन प्रणाली में सूचकांक उत्पन्न करते हैं
  [[[1,1]],[[2,1]]]

   सुनिश्चित करें कि प्रत्येक निर्देशांक के सूचकांक एक वेक्टर है (यदि एक वेक्टर है तो स्केलर होगा )
  [[[1,1]],[[2,1]]]

  ()⌷¨ निम्नलिखित में से प्रत्येक में अनुक्रमणिका:

   ⊂⊂⍺ कुल्हाड़ियों (दोगुना संलग्न; एक बार पहली और एकमात्र धुरी के साथ उन कोशिकाओं का चयन करने के लिए , और एक बार ¨बाईं ओर कुल्हाड़ियों के पूरे सेट के साथ दाईं ओर प्रत्येक वेक्टर जोड़ी के लिए )
   2 1 2
  [[[1,1,1]],[[1,2,1]]]
[[1],[3]]

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.