古いバージョン(v0.6あたり)のJuliaのtipsを見て「動かない!」となったときのtips (非網羅的)
Juliaがv1.0になってから、しばらく経ちました。もうv1.1も出ています。
この記事では、v0.6あたりからの差分を、気づいた分だけ列挙していこうと思います。(今更感がありますが、自分の作業ついでにまとめておきます。)
Void
はNothing
になりました。
以上です。
いくつかの関数は、読み込みが必要になりました。
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
がなくなりました。
CartesianIndices
やLinearIndices
を使います。
無理やり変換:
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
も必要です...)
find
はfindall
になりました。
以上です。
sortcols
, sortrows
はsortslices
になりました。
オプションの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]))