行列要素ラベルの変換:sub2ind, ind2sub
MATLABのsub2indとind2sub
MATLABと同じ。
sub2indとind2subは廃止になりました...!以下参照。
- sub (subscript): 行列要素(i,j)。人間にわかりやすい方。
- ind (index): 行列要素を左上からタテに読んだラベル。人間にはわかりにくい方。
ind2sub
行列サイズ(N1,N2)とindexを指定する。
2-by-3行列でindex=3に相当する要素は
ind2sub((2,3),3)
(1,2)
sub2ind
前の例の逆で、2-by-3行列の(1,2)要素に相当するindexは
sub2ind((2,3),1,2)
3
たくさん変換できる
遠慮はいらない。一度にまとめて変換できる。
ただし、そのままでは配列なのでご注意。
subarray = ind2sub((2,3),[1,3,5]) # ([1,1,1],[1,2,3]) subs = hcat(subarray[1],subarray[2])
3x2 Array{Int64,2}:
1 1
1 2
1 3
- 上の例で、
[1,3,5]
の部分は配列じゃないとダメ。1-by-N行列[1 3 5]
だったらvec([1 3 5])
で配列に変換しておく。
subs = [2 5; 1 4; 1 2; 6 6; 1 1] inds = sub2ind((6,6),subs[:,1],subs[:,2])
5-element Array{Int64,1}:
26
19
7
36
1