Juliaのバージョンによってdiagm()関数の動きが異なるというお話。1.0.3では要素に0が含まれるとエラーになる。1.4.1なら大丈夫。もちろん最新版は1.5が出ているので古い話になってしまうが、Debianの現行バージョンであるDebian10(buster)では1.0.3である。
行列を定義するのに
A = [ 3 0 0 0 2 0 0 0 1 ]
などと書くのだが、対角要素しかない行列では簡単に、
A = diagm([3,2,1])
と書ける。これは便利だ。
最近はUbuntu 20.04を使っていて問題なかったのが、Debian10(buster)でやると、
p11 1 /p22 1.0 /p33 0.0 / ERROR: LoadError: MethodError: no method matching diagm(::Array{Float64,1}) Closest candidates are: diagm(!Matched::Pair{#s576,#s575} where #s575<:(AbstractArray{T,1} where T) where #s576<:Integer...) at /build/julia-wJr69F/julia-1.0.3+dfsg/usr/share /julia/stdlib/v1.0/LinearAlgebra/src/dense.jl:313 Stacktrace:...以下略
1行目が検証のために出した行で、p33が0になったのでエラーが出たと判明。
juliaのバージョンは
adachi@fumita:~$ julia -v julia version 1.0.3
うまく行くUbuntuでは
adachi@ebook:julia$ julia -v julia version 1.4.1
OSとの関係。
OSバージョン | OSリリース日 | Juliaバージョン | |
Debian | 10.0 | 2019年7月6日 | 1.0.3 |
Ubuntu | 20.04 LTS | 2020年4月23日 | 1.4.1 |
DebianもUbuntuも現バージョンには最初からJuliaは入っていない。必要に応じてaptを使ってディストリビューションで用意してあるバージョンをインストールするのが標準。それが用意されていない場合は独自に入れる場合もある。インストールの記録を見るとどちらもディストリビューションの標準のものだった。
探し方は
adachi@fumita:~$ zcat /var/log/apt/history.log.11.gz|less
など。
Debianでは
Start-Date: 2020-06-16 11:40:23 Commandline: /usr/sbin/synaptic Requested-By: adachi (1000) Install: libc-ares2:amd64 (1.14.0-1, automatic), fonts-font-awesome:amd64 (5.0.10+really4.7.0~dfsg-1, automatic), julia:amd64 (1.0.3+dfsg-4), libopenlibm2:amd64 (0.6.0+dfsg-2, automatic), libopenblas-dev:amd64 (0.3.5+ds-3, automatic), git-man:amd64 (1:2.20.1-2+deb10u3, automatic), libutf8proc2:amd64 (2.3.0-1, automatic), libjs-mathjax:amd64 (2.7.4+dfsg-1, automatic), julia-doc:amd64 (1.0.3+dfsg-4), libspqr2:amd64 (1:5.4.0+dfsg-1, automatic), libdsfmt-19937-1:amd64 (2.2.3+dfsg-4, automatic), fonts-mathjax:amd64 (2.7.4+dfsg-1, automatic), nodejs:amd64 (10.21.0~dfsg-1~deb10u1, automatic), git:amd64 (1:2.20.1-2+deb10u3, automatic), node-highlight.js:amd64 (9.12.0+dfsg1-4, automatic), fonts-inconsolata:amd64 (001.010-5, automatic), libuv1:amd64 (1.24.1-1, automatic), libjs-highlight.js:amd64 (9.12.0+dfsg1-4, automatic), libjs-requirejs:amd64 (2.3.6-1, automatic), libjs-jquery-ui:amd64 (1.12.1+dfsg-5, automatic), libopenblas-base:amd64 (0.3.5+ds-3, automatic), nodejs-doc:amd64 (10.21.0~dfsg-1~deb10u1, automatic), libnode64:amd64 (10.21.0~dfsg-1~deb10u1, automatic), julia-common:amd64 (1.0.3+dfsg-4, automatic), libjulia1:amd64 (1.0.3+dfsg-4, automatic), libjs-lodash:amd64 (4.17.11+dfsg-2+deb10u1, automatic), liberror-perl:amd64 (0.17027-2, automatic) End-Date: 2020-06-16 11:40:40
ubuntuの方は
Start-Date: 2021-04-05 00:51:31 Commandline: /usr/sbin/synaptic Requested-By: adachi (1000) Install: libssh2-1:amd64 (1.8.0-2.1build1, automatic), libmbedtls12:amd64 (2.16.4-1ubuntu2, automatic), julia:amd64 (1.4.1+dfsg-1), libopenlibm3:amd64 (0.7.0+dfsg-1, automatic), libllvm8:amd64 (1:8.0.1-9, automatic), libmbedcrypto3:amd64 (2.16.4-1ubuntu2, automatic), git-man:amd64 (1:2.25.1-1ubuntu3.1, automatic), libutf8proc2:amd64 (2.5.0-1, automatic), libdsfmt-19937-1:amd64 (2.2.3+dfsg-4, automatic), git:amd64 (1:2.25.1-1ubuntu3.1, automatic), libhttp-parser2.9:amd64 (2.9.2-2, automatic), libmbedx509-0:amd64 (2.16.4-1ubuntu2, automatic), julia-common:amd64 (1.4.1+dfsg-1, automatic), libjulia1:amd64 (1.4.1+dfsg-1, automatic), libgit2-28:amd64 (0.28.4+dfsg.1-2, automatic), liberror-perl:amd64 (0.17029-1, automatic) End-Date: 2021-04-05 00:51:46
DebianやUbuntuは基本的にはディストリビューションがアップグレードされるタイミングで含まれるソフトウェアのバージョンが上がる。以前は、これが不満でJavaやOpenOffice, mozcなどで最新のものを入れることをしていたが、最近はディストリビューションの用意したものでそれほど不満がなかった。独自に入れるとOSのバージョンアップのときに気にしなければならないものが増えることもあって独自に入れることは控えるようになっている。
今回は、Debianのアップグレードが近いので、そのまま待とうかと思っている。
2021-5-30に軽く検索したもの。 新しい言語なので進化が速い。古い情報もあるので注意。