LoginSignup
10
3

More than 3 years have passed since last update.

Julia 0.7.0でつまずいたことメモ【20.05.15更新】

Last updated at Posted at 2018-08-09

はじめに

ついに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が出る

【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

となります。このような端数処理が簡単にできるようになったようです。

10
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
3