2017-08-12 104 views
4

幾個子陣列的欲構成命名˚F一個12×12矩陣出4中給出較小的子矩陣應位於不同的位置:形狀3×6的撰寫矩陣出以J

  • 數組A應該從(0; 0)〜(2; 5)形狀4×9的
  • 陣列乙應該從(3; 3)至(6; 11)
  • 陣列形狀的3×3的C應該從(7; 0)到(9; 2)
  • 形狀2x3的陣列D應該從(10; 6)到(11; 8)

所有其他原子都是零。我開始設置F =: 12 12 $ 0,但嘗試使用amend動詞失敗。對此最好的做法是什麼?

我的子陣列: A =: 3 6 $ _1 1 0 0 0 0 0 0 _1 0 0 1 0 0 0.99 0 _1 0 B =: 4 9 $ 1 0 0 1 0 0 _1 0 0 0 1 0 0 0 0 0 _1 0 0 1 0 0 _1 0 0 0 0 1 0 1 1 0 1 1 0 1 C =: 3 3 $ 1 0 0 0 1 0 0 0 1 D =: 2 3 $ 1 0 0 0 0 1

回答

4

每個陣列的形狀使座標列表。

c_D =: {@(;&i.)/ $ D 
┌───┬───┬───┐ 
│0 0│0 1│0 2│ 
├───┼───┼───┤ 
│1 0│1 1│1 2│ 
└───┴───┴───┘ 

添加抵消上述座標

c_D =: (<10 6) + &.> c_D 

,現在使用修訂:

D c_D } F 

可以形成一個動名詞簡化這一過程,東西線沿線的:

g =: 3 : '({.y) +&.> {@(;&i.)/$ >{:y' 
m =: ((>@{:@[)`([email protected][)`]) 

((0 0);A) m} F 
((3 3);B) m} F 
etc. 
3

稍微不同租金方法,如果組件具有一致的形狀,可能會起作用,包括填充組件陣列,然後組裝12X12陣列。

12{."1. A  NB. Pad 0's to the right 
_1 1 0 0 0 0 0 0 0 0 0 0 
0 0 _1 0 0 1 0 0 0 0 0 0 
0 0 0.99 0 _1 0 0 0 0 0 0 0 
    _12{."1 B NB. Pad 0's to the left 
0 0 0 1 0 0 1 0 0 _1 0 0 
0 0 0 0 1 0 0 0 0 0 _1 0 
0 0 0 0 1 0 0 _1 0 0 0 0 
0 0 0 1 0 1 1 0 1 1 0 1 
    12{."1. C 
1 0 0 0 0 0 0 0 0 0 0 0 
0 1 0 0 0 0 0 0 0 0 0 0 
0 0 1 0 0 0 0 0 0 0 0 0 
    _12{."1 [ 6 {."1 D NB. extra {. required to pad both ends 
0 0 0 0 0 0 1 0 0 0 0 0 
0 0 0 0 0 0 0 0 1 0 0 0 

然後組裝最終陣列

(12{."1. A) , (_12 {."1 B),(12 {."1 C),_12{."1[ 6 {."1 D 
_1 1 0 0 0 0 0 0 0 0 0 0 
0 0 _1 0 0 1 0 0 0 0 0 0 
0 0 0.99 0 _1 0 0 0 0 0 0 0 
0 0 0 1 0 0 1 0 0 _1 0 0 
0 0 0 0 1 0 0 0 0 0 _1 0 
0 0 0 0 1 0 0 _1 0 0 0 0 
0 0 0 1 0 1 1 0 1 1 0 1 
1 0 0 0 0 0 0 0 0 0 0 0 
0 1 0 0 0 0 0 0 0 0 0 0 
0 0 1 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 1 0 0 0 0 0 
0 0 0 0 0 0 0 0 1 0 0 0