MATLAB移民のためのJulia tips

MATLAB移民のためのJulia tips

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

古いバージョン(v0.6あたり)のJuliaのtipsを見て「動かない!」となったときのtips (非網羅的)

Juliaがv1.0になってから、しばらく経ちました。もうv1.1も出ています。 この記事では、v0.6あたりからの差分を、気づいた分だけ列挙していこうと思います。(今更感がありますが、自分の作業ついでにまとめておきます。) VoidはNothingになりました。 以上…

PyPlotで行列のcolor plot

pcolormeshが一番簡単だと思ったのでメモ。 下のような3×3行列 prs をプロットする。 using PyPlot prs = [1 2 3;4 5 6;7 8 9] prsview = zeros(size(prs)) for k = 1:size(prs,1) prsview[k,:] = prs[size(prs,1)-k+1,:] end pcolormesh(prsview,cmap="Blue…

JuliaでのPyPlot (matplotlib)

ぜんぜん網羅的ではありません。 自分で調べるたびに追加していきます。 種々のプロット scatter plot 基本はこんなかんじ。 fig = figure("pyplot_scatterplot",figsize=(5,5)) ax = axes() val1 = rand(10) val2 = rand(10) scatter(val1,val2,s=100,alpha…

ファイル操作

一番基本的なことと、かゆいところだけ書きます。 全般的には、もっとちゃんと書いてある記事を参考にしてください。 ファイルの読み込み もう少し具体的な例 ポインターを戻す ファイルへの書き込み ファイルの読み込み 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が数の場合 行単位ではなく、…

Stochastic block model

とある身内のご要望にお応えして、stochastic block model (SBM)を生成するコードを載せます。 Poisson次数分布の、一番基本的なSBMを生成します。 Affinity matrix (p_rs)の要素を陽に指定して、任意のブロック構造を作れます。 cinとcoutは、rescaleされた…

Juliaをちょっとだけチューニングしてみようかなと思ったとき用

主に他の方の解説紹介。 随時追加予定。 x2.0ではなくx2を使う x^2.0ではなくx^2を使う(Julia言語) - Qiita

グラフの隣接頂点配列(速さ比較)

速度を比べっこ。 ランダムグラフのedgelist(links)を作ってみて、「各頂点の隣接頂点の配列」を要素に持つ、入れ子配列(nbsimpleとnb)を2通りで作ってみる。 links = round(Int64,10000*rand(50000,2)+1) links = vcat(links,hcat(links[:,2],links[:,1]))…

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

配列から文字列、文字列から配列への変換 (convert array to string, string to array)

配列を文字列に変換 joinを使う: a = ["a","b","c","d","e"] join(a, " - ", " and ") "a - b - c - d and e" joinのオプションを2つ指定すると、最後の区切りだけ2つ目のものになる。 3つ以上はたぶん指定不可。 文字列を配列に変換 splitを使う: a = "…

Indicator行列:broadcast

Indicator行列 例えば、各要素は1〜3番目のどれかが1、他は0になっていて、 要素1:1番目が1、他は0 要素2:3番目が1、他は0 要素3:2番目が1、他は0 要素4:1番目が1、他は0 というとき、 1 0 0 0 0 1 0 1 0 1 0 0 という行列。 作り方…

プロット:Gadflyのtips

準備 配列データをプロットする 2次元density plot: rectbin DataFrameを使ってプロットする 配列データをDataFrameにする scatter plot histogram プロットに軸名、タイトルをつける Juliaの上でプロットしたかったら、PyPlotかGadflyが標準的らしい。 Gad…

型:配列と行列

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

深さ優先探索(DFS):グラフの連結成分

どこにでも書いてある、DFSで連結成分を出してくるという操作のサンプル。 特にJuliaだから特殊ということはないはず。 枝の集合linksが与えられたときに、連結成分の頂点CCnodesを返す。 Stackでやる方法 function dfs_stack(nb,root) visited = Int64[] st…

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

例えば、こういうこと。 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)。) 正…

IJuliaのtips

個人的にはあんまり好きじゃないIJulia。 Mathematicaっぽく操作できる。 インストール (いろいろハマりどころはあるけど、ちゃんと記録していないからうる覚えで書く。。。) インストールに関しては既にいろんなところで紹介されていると思うので、不要かも…

配列から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…

MATLABとJuliaの違い(普通に使う人視点)

まず、本家に Noteworthy differences from MATLAB というのがある。(以下はこれを翻訳したり熟読した結果のものでは、ない。) for文で新たに変数のスコープが作られる。(for文の中でだけ定義されているものはループの外からアクセスできない。ループの外…