MATLAB移民のためのJulia tips

MATLAB移民のためのJulia tips

何も考えずに速く計算できないのならば、何もやりたくない。

行列要素ラベルの変換:sub2ind, ind2sub

MATLABのsub2indとind2sub

MATLABと同じ。

sub2indとind2subは廃止になりました...!以下参照。

julia.hatenablog.jp

  • 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