はじめに
ついにv0.7.0が出ました(そして、今はv1.4.1)。色々変化があるようで、たくさんのWARNINGが出されるだろうということを聞いています。WARNINGの対処方法が分かったりしたら、忘れないようにここにメモして行こうと思います。本記事は何度も何度も更新していくことになるかと思います(気軽な個人用メモの感覚で行きます)。何かおかしな点がありましたら、ご指摘いただければと思います。
困ったことや解決したこと
①Pkg.add("云々")
すると、Base.Pkg is deprecated, run using Pkg
instead”とWARNING出される
REPL上で]
を押すと、pkg管理のための専用モード(?)のような状態になります。この時、REPLの入力受付部の文言には、見た目上の変化が起きて、青字の(v0.7) pkg>
になります。その状態で、add Plots
と入力すれば、パッケージ(追加機能)が追加(ダウンロード・インストール)されます。
※pkg管理のモードを解除するには、Ctrl+C
を入力すれば良いようです。他,バックスぺースキーでも解除できました。
※他のpkg管理のモード中でのコマンドも、少しだけ紹介しておきます。st
またはstatus
では、追加されたパッケージの一覧(バージョン付)の表示ができる、up
またはupdate
では、追加されたパッケージのアップデートができるようです。この辺りは頻繁に使うかもしれませんね。
【参考】Getting Starteの章←URL: https://docs.julialang.org/en/latest/stdlib/Pkg/#Garbage-collecting-old,-unused-packages-1
②IJulia は8/9現在は、Windows環境では動作しない の状況
【2018.10頃~】今は普通に使えます!
①に示した手順で、add IJulia
としてパッケージを追加し、その後、notebook()
を打つことで、起動することはできました。しかし、1+1
のような簡単なコードの実行をしても、応答がまったく帰っきませんでした。現在いろいろな関連するパッケージで対応中なのだと思われます。
★8/12追記:pkg管理のモードでadd Conda#master
しておいたり、それでも駄目なら、add PyCall#master
もしておいたりすると、ちゃんとIJuliaが動作するかもしれません。私はこれで動くようになりました。これは、下記参考1、2で分かりました。他にも応用が利きそうです。
【参考1】https://twitter.com/cometscome_phys/status/1027789617632669696
【参考1】https://twitter.com/cometscome_phys/status/1027790617152090112
③eye()
がdeprecatedだとWarning出される
例えて説明します。Julia 0.6.4までのeye(3)
であれば、代わりに、Matrix(1.0I, 3, 3)
等とすることで従来と同じ結果が得られるようです。ただし、その前にusing LinearAlgebra
としておく必要があるようです(Matrix()
で登場したI
はLinearAlgebraの中にあるから)。このようにすれば、deprecatedの警告がでなくなります。eyeがdeprecatedになったのかについての議論は下記参考1で見ることができます。
でも、それだけではなく、次のことも知っておくと良いでしょう。きっと、より便利になったと感じられると思います。幾つかの例で説明します。
zeros(3, 3) + I
とすると、結果は、
3×3 Array{Float64,2}:
1.0 0.0 0.0
0.0 1.0 0.0
0.0 0.0 1.0
zeros(5, 5) + I
とすると、結果は、
5×5 Array{Float64,2}:
1.0 0.0 0.0 0.0 0.0
0.0 1.0 0.0 0.0 0.0
0.0 0.0 1.0 0.0 0.0
0.0 0.0 0.0 1.0 0.0
0.0 0.0 0.0 0.0 1.0
もう少し応用で、
[zeros(3, 3) I
ones(3, 3) 2*ones(3, 3)]
とすると、結果は、
6×6 Array{Float64,2}:
0.0 0.0 0.0 1.0 0.0 0.0
0.0 0.0 0.0 0.0 1.0 0.0
0.0 0.0 0.0 0.0 0.0 1.0
1.0 1.0 1.0 2.0 2.0 2.0
1.0 1.0 1.0 2.0 2.0 2.0
1.0 1.0 1.0 2.0 2.0 2.0
この挙動はかなり嬉しい気がします!LinearAlgebraのI
は、色々応用が利きそうですね。詳しくは、下記参考2のdocumentationを参照すると良いでしょう。
【参考1】URL: https://discourse.julialang.org/t/why-eye-has-been-deprecated/12824/86
【参考2】URL: https://docs.julialang.org/en/latest/stdlib/LinearAlgebra/
④パッケージPlotsはusing Plots
でERRORが出る
using Plots
でERRORが出る【2018.10頃~】今は普通に使えます!
今のところ解決不明です。きっと対応中なのだと思います。
私はWindows7環境ですが、他の方はどうなのでしょうか?
ちなみに、pkg管理のモードのst
で見られる情報は以下の通りでした(自分の手でadd
したパッケージの情報だけ表示される模様。依存して勝手に追加されるパッケージの情報は表示されないみたいです)。
[7073ff75] IJulia v1.9.1
[91a5bcdd] Plots v0.17.4
[92933f4c] ProgressMeter v0.5.6
[438e738f] PyCall v1.17.1
[24249f21] SymPy v0.7.0
⑤関数名の変化【18.11.09更新】
例えば、endof()
はdeprecadedとなり、代りにlastindex()
を使うように、となりました(似ているlength()
は変化なし)。
過去のコードを直す場合、関数名すべて置換することを考えるかもしれませんが、そうしなくても、コードの頭の方に、古い関数名 = 新しい関数名
を書いておけば、正しく動作するようにできます。
他、関数名が変化していることに気づいたものは以下の通りです。
# 古い方 = 新しい方
endof = lastindex
ismatch = occursin
linspace(st, en, N) = range(st, en, length=N)
flipdim(A, d) = reverse(A, dims=d) #reverseではAが1次元配列ならばdimsの指定は省略できる
find = findall
find(なんとか)[1] = findfirst(なんとか)
find(なんとか)[end] = findlast(なんとか)
⑥using 〇〇が必要になった関数
# readdlm(csv等のファイルの読み込み)
using DelimitedFiles
readdlm("filename.csv", ',')
# det(行列式の計算)
using LinearAlgebra
det(A)
⑦丸め関数round()
、床関数floor()
、天井関数ceil()
について
例えば、
round(123.456, digits = 1) #v0.6.4まではround(123.456,1)と書いた
round(123.456, digits = 0)
round(123.456, digits = -1)
とすると、結果はそれぞれ、0.1刻み、1刻み、10刻みに丸められたもの、すなわち、
123.5
123.0
120.0
となります。floor()
やceil
も同様のようです。関数にdigits=整数
というキーワード引数を追加することで、端数処理の桁位置が設定できるようです。
さらにbase=整数
というキーワード引数も追加すると、もう少し難しい刻みの端数処理が行えます。例えば、
round(123.26, digits=1, base=2)
round(123.26, digits=1, base=3)
round(123.26, digits=1, base=4)
とすると、結果はそれぞれ、0.5刻み、0.3333333333333333刻み、0.25刻みに丸められたもの、すなわち、
123.5
123.33333333333333
123.25
となります。このような端数処理が簡単にできるようになったようです。