เช่นเดียวกับสัญลักษณ์ APL ส่วนใหญ่⍉จะมีความหมายต่างกันเมื่อถูกเรียกด้วยอาร์กิวเมนต์หนึ่งตัว (transpose) เทียบกับสองข้อโต้แย้ง ความท้าทายนี้เกี่ยวข้องกับสิ่งหลังซึ่งคล้ายกับ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 แต่ลำดับของตัวห้อยที่จำเป็นในการเข้าถึงองค์ประกอบเฉพาะนั้นได้รับการจัดเรียงใหม่ตามที่ระบุโดยคำสั่ง
ตัวอย่างเช่นสมมติว่า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]และ A คือ 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 เช่นเดียวกับที่เป็นค่าเริ่มต้น APL
อาร์เรย์หลายมิติหรือซ้อนกัน
Aของมิติn ≥ 1รายการ
orderของnจำนวนเต็มบวกประกอบด้วยจำนวนเต็ม {0,1, ... , k} (หรือ {1, ... , k + 1} 1 ดัชนี) สำหรับบางk < nในลำดับใด ๆ อาจจะเป็น ด้วยการทำซ้ำ
เอาท์พุต
- อาร์เรย์หลายมิติหรืออาร์เรย์ที่ซ้อนกันแสดงถึงผลลัพธ์ของการใช้ทรานสดิสไดร์ดิคกับอาร์กิวเมนต์เหล่านั้น (เอาต์พุตจะมีมิติk + 1 )
คุณสามารถเขียนโปรแกรมฟังก์ชั่นและอื่น ๆ ตามที่อนุญาตโดยมาตรฐานปัจจุบันของเมตา
หากภาษาของคุณมีบิวด์อินขอแนะนำให้เขียนวิธีการแก้ปัญหาโดยไม่ต้องใช้บิวอินเพื่อให้ได้คำตอบที่น่าสนใจ
กรณีทดสอบ
การใช้งาน Python อ้างอิงเร็ว ๆ นี้
หมายเหตุสำหรับการอ่านกรณีทดสอบ: ใน APL แกนสุดท้ายและแกนสุดท้ายของอาร์เรย์จะเรียงตามคอลัมน์และแถวตามลำดับ
⍉ที่ใช้ดัชนีแกนตรงกันข้ามเป็นค่าเริ่มต้นเพื่อให้⍉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]ร้านค้าภายในอาร์เรย์เป็น
⍉P