MATLAB移民のためのJulia tips

MATLAB移民のためのJulia tips

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

基本操作

ファイル操作

一番基本的なことと、かゆいところだけ書きます。 全般的には、もっとちゃんと書いてある記事を参考にしてください。 ファイルの読み込み もう少し具体的な例 ポインターを戻す ファイルへの書き込み ファイルの読み込み open( "filename", "r" ) do fp for …

条件を満たす行を行列から検索・抽出・削除

MATLABのismember。 例えば、 a = [1 2 3; 7 8 9] B = [1 2 3;4 5 6;7 8 9;10 11 12] 行列Bのなかで、行列aの行と同じ要素を持っている行を検索・抽出・削除したい、というとき。 aが数の場合 aがベクトルの場合 aが行列の場合 aが数の場合 行単位ではなく、…

unique

unique(a,1): 行を見比べてunique。 unique(a,2): 列を見比べてunique。 a = [1 1;3 3;1 1] unique(a,1) unique(a,2) unique(a,1) = 1 1 3 3 unique(a,2) = 1 3 1

型:配列と行列

「一次元配列も1-by-N行列も似たようものだから、どっちでも動くはず」と思ってハマっているMATLAB移民はこちら。 普通の言語は、そのへん適当にできるようにはなっていない。 1-by-N行列を一次元配列に変換 vec()で1-by-N行列を一次元配列にできる。 u = [1…

引数は参照渡し(代入で困った人はこちら)

例えば、こういうこと。 a = [1,2,3] b = a b[1] = 10 println(b) # => [10,2,3] println(a) # => [10,2,3] aをbに代入してから、bの要素を書き変えると、aまで変更されちゃうということ。 参照渡しというやつ。(詳しいことはpythonで参照渡しの説明をして…

単位行列

MATLABのdiag(ones(N,1)) Python使いには当然すぎることだけど、 上のようなMATLAB的な書き方は必要なくて、 eye(3) 3x3 Array{Float64,2}: 1.0 0.0 0.0 0.0 1.0 0.0 0.0 0.0 1.0 というかんじに単位行列は作れる。 (整数にしたかったら、eye(Int64,3)。) 正…

配列からtupleに変換する

v = [1,4] tuple(v...) (1,4) …は"splat演算子"。この場合、arrayという型を外して、型のない羅列にするイメージ。(間違ってたら教えてください。)

配列・行列のなかで条件を満たすものを取り出す・要素数を出す

条件がベクトル・行列で与えられている場合 配列・行列のなかで条件を満たすものを取り出す 配列から値を取り出す 配列からインデックスを取り出す 行列から値を取り出す 行列からインデックスを取り出す (スパース)行列で非ゼロの要素を取り出す 配列・行列…

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

MATLABのsub2indとind2sub MATLABと同じ。 sub2indとind2subは廃止になりました...!以下参照。 julia.hatenablog.jp sub (subscript): 行列要素(i,j)。人間にわかりやすい方。 ind (index): 行列要素を左上からタテに読んだラベル。人間にはわかりにくい方…

配列の並び替えを列挙

MATLABのperm(array)) 順列(permutation)がしたい。 v = [1 4 5 7] ind = collect(permutations(1:4)) # [1,2,3,4]についての順列を列挙 for k=1:size(ind,1) vk = v[ind[k]] end [1,4,5,7] [1,4,7,5] [1,5,4,7] [1,5,7,4] [1,7,4,5] [1,7,5,4] [4,1,5,7] [4…

配列から一度にたくさんの要素を削除

配列Vから配列excを消したい。 V = [2,3,5] exc = [3,5] filter(x->!(x in exc), V) (V[うんぬん]的な書き方はできないんですかね。。) xはダミー変数なので、お好きな文字を。

要らない行列要素を消す

MATLABのA(k+1:max,:) = [] 行列Aのk行目以降を削除してN-by-k行列にする。 MATLABのあの書き方は、かなり特殊らしい。 普通に a = a[1:k, : ] Juliaの=は代入ではなく、参照。

行列を行ごとにソートする

sortrowsとsortcolsは、廃止になりました。sortslicesを使います。以下参照。 julia.hatenablog.jp MATLABのsortrows(X, 2) N-by-2行列 X の、2列目を評価して、行ごとに並べ替える。(昇順) X = [5 3; 2 6; 4 2] sortrows(X, by=x->x[2]) 3x2 Array{Int64…