既にあるPythonの関数(サブルーチン)をJuliaで使いたい、あるいは、JuliaよりもPythonを使った方が書きやすい場合にはPycallが便利と思う。

今、呼びたい関数を含むファイルの名前がhoge.py、呼びたい関数をfoo、その引数がx,、y、戻り値をzとする。
まず
using Pycall
として、次いでpyincludeというマクロを使って
@pyinclude("hoge.py")
として、Pythonのファイルを読み込むと準備完了。

あとは呼びたい位置で
z = py”foo”(x, y)
とすれば呼び出せる。
関数名だけをダブルクオーテーションで括り、戻り値や引数部分は外にするというちょっと不思議な書き方をする。

github.com/JuliaPy/PyCall.jl

(gfortranを想定)で読み書きできるようにしたいのだが、 を使うときよりも何だかややこしくてよくわからないので、自分なりに整理してみる。

環境はMac OS Ventura。
参考にしているのは本家のサイト:
portal.hdfgroup.org

まずはHDF5を読み書きするためのファイルはhomebrewを使ってインストールした。
gfortran ver.13.2.0
HDF5 ver.1.14.3

のライブラリで.tar.gzアーカイブを解凍する方法

How to uncompress a ".tar.gz" file using ?
geeksforgeeks.org/how-to-uncom

で、文字変数から特定の文字列を削除するためには置換を使う。削除したい文字列を(null)で置き換えるという具合。
例えば、hogeという文字変数中のahoという文字列を削除するためには
hoge.replace("aho", "")
とする。
つい忘れて、削除するコマンドを探してしまう。

複数のファイルにわかれている コードを 経由で から呼べるようにするために知っておきたいことのブックマーク。
notmatthancock.github.io/2017/

のお絵描きツールに慣れていないせいか、Julia上でお絵描きがしにくい。
ここで悩むよりは に持ち込んだ方が早いので、やや大きめでのファイルをPythonとやりとりできるフォーマットを探していて、 がよさげに見えたので、書き出す方法を変更した。
HDF5の仕様には深入りせずに、とにかくまずはネットに出ている「呪文」を唱えて、まがりなりにもファイルの読み書きできることを最優先。

qiita.com/cometscome_phys/item
の記事でどうにかなった。

に相当するものとして、 には なるものがある。
JLDとJLD2との間の互換性は考慮されていない。
JLD2の方が読み書きは早いらしい。
ということで、JLD2を使ってみることに。
HDF5の「亜種」らしいが、HDF5をほとんど理解できていないので、「そうなんですか」以上の感想が持てない。

JLDの本家:github.com/JuliaIO/JLD.jl
JLD2の本家:github.com/JuliaIO/JLD2.jl

うむむ、私がやりたいことに使うには厳しい模様。
として出力した100万行のリスト(1行あたりは3つの倍精度の実数からなる1行のリストで、リストが入れ子になっている)を読み込ませたところ、 では2秒足らずで済むところをPickle.jlを使った では50秒超えであった。
のモジュールを使って読み込んだ上で に持ち込むのがよさそう。

スレッドを表示

Juliaで を直接読み込めるパッケージがある。
名前はPickle.jlとまんま。
experimental packageとのことなので、自分のやりたいことができるかはまた別の話かもしれないが。

juliapackages.com/p/pickle

試してみると、「そりゃ、そうでしょう」と思いますが、 はdumpを複数行で実行できるし、当然loadも複数行で実行できる。
オンラインに出ている例だと、大概1行だけなので、できるかどうかがよくわからない気がしてしまっていた。
マニュアル類をちゃんと読まずに使っているのが悪いんでしょうけど。

で入れたパッケージの数が増えてくると、依存関係がわからなくなってしまう。
というパッケージを導入すると、ツリー形式で依存関係を表示してくれるようになる。
pypi.org/project/pipdeptree/

Fedibird

様々な目的に使える、日本の汎用マストドンサーバーです。安定した利用環境と、多数の独自機能を提供しています。