MATLAB移民のためのJulia tips

MATLAB移民のためのJulia tips

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

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

Juliaがv1.0になってから、しばらく経ちました。もうv1.1も出ています。

この記事では、v0.6あたりからの差分を、気づいた分だけ列挙していこうと思います。(今更感がありますが、自分の作業ついでにまとめておきます。)

VoidNothingになりました。

以上です。

いくつかの関数は、読み込みが必要になりました。

  • sparseを使うときは、using SparseArrays
  • eigsなどはusing Arpack(Arpackが入れられない人は下部分参照)

次元指定は、dims=を付けます。

ERROR: LoadError: MethodError: objects of type Array{Float64,2} are not callable Use square brackets [] for indexing an Array.とかがエラーで出た人はこちら。

findminなどを使ったときに、 ERROR: LoadError: MethodError: no method matching findmin(::Array{Float64,2}, ::Int64)とか出て来た人もこちら。

x = rand(3,2)
sum(x,2) # v0.6
sum(x, dims=2) # >v0.7

sub2ind, ind2subがなくなりました。

CartesianIndicesLinearIndicesを使います。

無理やり変換:

function sub2ind((a,b),i,j)
    A = zeros(a,b)
    ind = LinearIndices(A)[i,j]
    return ind
end
function ind2sub((a,b), i)
    i2s = CartesianIndices(zeros(a,b))
    return i2s[i]
end

https://discourse.julialang.org/t/psa-replacement-of-ind2sub-sub2ind-in-julia-0-7/14666

eyeがなくなりました。

function eye(n)
    Diagonal{Float64}(I, n)
end

https://myenigma.hatenablog.com/entry/2018/08/12/113739

eigsなどはusing Arpackを読み込んでから使います。

https://discourse.julialang.org/t/replacement-of-eigs/13540

そしてこのArpack、Juliaをcondaから入れていた場合、失敗します... 本家のバイナリなら大丈夫ということです。 (add Arpackだけじゃなく、build Arpackも必要です...)

findfindallになりました。

以上です。

sortcols, sortrowssortslicesになりました。

オプションのby=x->(x[2],x[3])とかは、そのまま使えます。

こんなかんじ。

a = [1.0, 3.1, 3.2, 3.3]
b = [2.2, 2.4, 2.6, 2.8]
c = [3.9, 3.1, 1.3, 3.1]

m = transpose(hcat(a, b, c))

sortslices(m,dims=1,by=x->(x[2],x[3]))