เช่นเดียวกับสัญลักษณ์ 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