2015年5月13日水曜日

Julia で戸惑うところ (Julia と Matlab の違い)

Julia は Matlab に似たように書けるので、ついつい同じように書いてハマることがあるので、そういったことについてのメモをしておく。

(1) 変数の deepcopy に気をつけろ!
たとえば、Matlab で
x = [3 4 5];
y = x;
y(2) = 7;
としても、x は変わらず x = [3 4 5];である。
しかし、Julia で
x = [3 4 5];
y = x;
y[2] = 7;
とすると、y につられて x も x = [3 7 5] に変化する。
要するに、Matlab では y = x で別の配列が準備されて配列の中身もコピーされるが、Julia の y = x は単純に「 x という配列に y という名前でもアクセスできる」ということで中身も同じである。
Matlab のようにするには、
y = deepcopy(x)
とする。


(2) integer と float に気をつけろ!
Matlab の場合は基本的に float (double) で計算されているが、Julia の場合は厳密に違う型として認識されている。
たとえば、
x = [3 4 5]
とすると出来上がる型は 1x3 Array{Int64,2}: である。
したがって、
x[1] += 2.3
とすると、float の値となる 3 + 2.3 = 5.3 を x[1] に代入しようとして
ERROR: InexactError()
で失敗する。

このときには、
x = float([3 4 5])
と float をかませておけば回避できる。


(3) max と maximum の違いに気をつけろ!
Matlab の max 関数は、Julia では max と maximum に機能の違いで分割されている。
max は要素を引数として並べることできる状態、maximum なら配列が引数となる。
たとえば、

max(2,3) と直接 2と3が引数となる場合は max, maximum([2,3]) と配列[2,3]が引数ならmaximum である。
逆に max([2,3]), maximum(2,3) とするとエラーで失敗する。




0 件のコメント:

コメントを投稿