我正在嘗試撰寫一些 APL 代碼,該代碼將采用矩陣并回傳矩陣及其所有 90 度旋轉。
作為一個旋轉函式,我有: {(?°?)????},它在右邊有一個矩陣,在左邊有一個 CW 旋轉數,它本身似乎作業正常。
為了生成所有 4 個輸出陣列,我嘗試使用這樣的外部產品:
r ← {(?°?)????}
mat2 ← (2 2 ? ?4)
0 1 2 3 °.r mat2
但它不起作用,只回傳基本陣列 4 次。我希望它使用左側術語作為單獨應用于右側引數的左側引數。
然而,當我在右邊給出多個引數時,它似乎做了我想要的——這里它對 2x2 和 3x3 矩陣進行 0 度和 90 度旋轉:
mat2 ← (2 2 ? ?4)
mat3 ← (3 3 ? ?9)
? This does what I was expecting
0 1 °.r mat2 mat3
┌───┬─────┐
│1 2│1 2 3│
│3 4│4 5 6│
│ │7 8 9│
├───┼─────┤
│3 1│7 4 1│
│4 2│8 5 2│
│ │9 6 3│
└───┴─────┘
? This just gives me back the same array twice
0 1 °.r mat2
1 2
3 4
1 2
3 4
我對 APL 很陌生,所以我不確定我是否得到了外部產品或電力運營商的使用錯誤。將形狀運算子應用于上述輸出也向我展示了一些與我預期不同的東西:
? 0 1 °.r mat2 mat3
2 2
? 0 1 °.r mat2
2 2 2
因此,兩個輸入陣列的情況似乎給了我一個 2x2 陣列,其中每個元素都是一個旋轉陣列,這正是我所期望的。但是一個輸入陣列的情況是給我一個 2x2x2(如果我使用所有 4 個旋轉,則為 4x2x2)的數字陣列。我不確定是什么導致了這里的結構差異,其中 1 個和更多正確的論點。我對最終會采用哪種結構感到很困擾,但我不知道差異來自哪里。
uj5u.com熱心網友回復:
你需要的是
0 1 2 3 °.r ?mat2
或者
0 1 2 3 r¨ ?mat2
0 1 2 3 °.r mat2可以使用以下代碼段檢查正在執行的操作:
0 1 2 3 °.{?←'?:'?'?:'????} mat2
?: 0 ?: 1
?: 0 ?: 2
?: 0 ?: 3
?: 0 ?: 4
?: 1 ?: 1
?: 1 ?: 2
?: 1 ?: 3
?: 1 ?: 4
?: 2 ?: 1
?: 2 ?: 2
?: 2 ?: 3
?: 2 ?: 4
?: 3 ?: 1
?: 3 ?: 2
?: 3 ?: 3
?: 3 ?: 4
正在發生的事情是每一個0 1 2 3都與mat2. 旋轉單個數字不會改變其方向,因此您將獲得同一矩陣的多個副本。
了解此行為的一個很好的資源是 APL Wiki外部產品頁面。
你需要的是0 1 2 3用整個壓縮每個,mat2即你需要把它封閉起來,?這樣它就會被視為一個單獨的物件。然后你會得到你需要的旋轉。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/413811.html
標籤:
