divrot in an infinitesimal box

Julia, python, algorithmのメモです

Julia PyCallで使うpython

どうもUrekaとかCanopyとか余計なものが入っていたせいでよくわからなく なったのでMac python一本にしました。そしたらPyCallするとkernelが落ちてしまう ようになった。PyCallの呼び出すpythonを指定してBuildしなおしたらなおったのでメモ。

julia> ENV["PYTHON"] = "/usr/local/bin/python"
"/usr/local/bin/python"

julia> Pkg.build("PyCall")

ところで、Python (hoge.py)を書き換えて、再度Julia Jupyterで

using PyCall
@pyimport hoge 

しても更新されないようだ。なぜだろう?

python mpfitをつかう

非線形フィットの定番、マルカート法。 すばらしいと評判のmpfitのpython版を試す。

インストール

ここからダウンロードして展開して、環境変数PYTHONPATHに追加するのみ

https://code.google.com/p/astrolibpy/downloads/detail?name=mpfit_2013.tar.gz&can=2&q=

テストコード

簡単。上手くいっている。numerical recipes時代って何だったんだろう。

Healpy 作図

Juliaでは作図が大変なので、Healpixの作図はpython/Healpyで行ったほうが良いかもしれない。 こんな感じで作図可能。

Jupyterではこれらを同じカラムに書かないと同時に表示されないので注意。

Julia - arrayの操作(I)

arrayの操作はいろいろあるので、まとめるのが難しいがメモ。

マスク

マスクはpythonと同様にできますが、> でなくて .>であるとか、==ではなくて.==であるとかに注意が必要である。

一次元配列いろいろ(I)

一次元の配列は、1d column vector (N-element array) と2d row vector (1xN-element array)の二種類あるのがポイント。

Julia - 内挿 (Interpolations)

InterpolationはInterpolations moduleを用いることで可能。 Interpolationは頻繁に使うので最下部にGist例を示しておく。

特に間違いやすいのが、

Interpolations.interpolate((t,) ...

の、このtupleの部分 (t,)と書くというところである。

Julia - moduleを使う

moduleを使用するための幾つか

pathを設定する

module hoge を作成し、そのmoduleを他のjuliaファイルやjuliaのコンソールなどから 呼び出したいとき、見つからないと怒られる。これはjuliaがmoduleを探すpathを指定することで解決するが、 複数の解決方法があるようだ

http://docs.julialang.org/en/release-0.4/manual/modules/

環境変数にJULIA_LOAD_PATHを設定する

c-shell系なら

setenv JULIA_LOAD_PATH directory-path1
setenv JULIA_LOAD_PATH directory-path2:${JULIA_LOAD_PATH}
...

のような感じで。

julia用のpath変数設定

もしくは.juliarc.jlを作成し、LOAD_PATH を書くことでも可能。

一時的にpathを追加する

これには

push!(LOAD_PATH, directory-path)

で実現できる。