既にあるPythonの関数(サブルーチン)をJuliaで使いたい、あるいは、JuliaよりもPythonを使った方が書きやすい場合にはPycallが便利と思う。
今、呼びたい関数を含むファイルの名前がhoge.py、呼びたい関数をfoo、その引数がx,、y、戻り値をzとする。
まず
using Pycall
として、次いでpyincludeというマクロを使って
@pyinclude("hoge.py")
として、Pythonのファイルを読み込むと準備完了。
あとは呼びたい位置で
z = py”foo”(x, y)
とすれば呼び出せる。
関数名だけをダブルクオーテーションで括り、戻り値や引数部分は外にするというちょっと不思議な書き方をする。
#Python のライブラリで.tar.gzアーカイブを解凍する方法
How to uncompress a ".tar.gz" file using #python ?
https://www.geeksforgeeks.org/how-to-uncompress-a-tar-gz-file-using-python/
#Python で、文字変数から特定の文字列を削除するためには置換を使う。削除したい文字列を(null)で置き換えるという具合。
例えば、hogeという文字変数中のahoという文字列を削除するためには
hoge.replace("aho", "")
とする。
つい忘れて、削除するコマンドを探してしまう。
複数のファイルにわかれている #Fortran コードを #f2py 経由で #Python から呼べるようにするために知っておきたいことのブックマーク。
https://notmatthancock.github.io/2017/03/07/multiple-modules-with-f2py.html
#julialang のお絵描きツールに慣れていないせいか、Julia上でお絵描きがしにくい。
ここで悩むよりは#Python に持ち込んだ方が早いので、やや大きめでのファイルをPythonとやりとりできるフォーマットを探していて、#HDF5 がよさげに見えたので、書き出す方法を変更した。
HDF5の仕様には深入りせずに、とにかくまずはネットに出ている「呪文」を唱えて、まがりなりにもファイルの読み書きできることを最優先。
https://qiita.com/cometscome_phys/items/7ced3362ac64b98129d1
の記事でどうにかなった。
#python の#pickle に相当するものとして、#julialang には#JLD や#JLD2 なるものがある。
JLDとJLD2との間の互換性は考慮されていない。
JLD2の方が読み書きは早いらしい。
ということで、JLD2を使ってみることに。
HDF5の「亜種」らしいが、HDF5をほとんど理解できていないので、「そうなんですか」以上の感想が持てない。
JLDの本家:https://github.com/JuliaIO/JLD.jl
JLD2の本家:https://github.com/JuliaIO/JLD2.jl
うむむ、私がやりたいことに使うには厳しい模様。
#python で#pickle として出力した100万行のリスト(1行あたりは3つの倍精度の実数からなる1行のリストで、リストが入れ子になっている)を読み込ませたところ、#python では2秒足らずで済むところをPickle.jlを使った#julialang では50秒超えであった。
#PyCall で#python のモジュールを使って読み込んだ上で#julialang に持ち込むのがよさそう。
#Python の #pip で入れたパッケージの数が増えてくると、依存関係がわからなくなってしまう。
#pipdeptree というパッケージを導入すると、ツリー形式で依存関係を表示してくれるようになる。
https://pypi.org/project/pipdeptree/
fedibirdにぼちぼち慣れていきたいと思います。書き損じが多いため、いったん投稿した後に引き戻して修正の上、再投稿をすることが多くなり、TLに何度もほとんど同じものが浮かんでは消え…をくり返して目障りな点はご容赦願います。