2015年3月4日水曜日

Julia と Python で比較

Python は数値計算などでメジャーな言語になりつつあるが、Operations Research の研究者が作った数値計算用言語の Julia とで、sensor network localization (SNL) の SDP 緩和のプログラムを作ることで比較してみた。

結果:
Python --> 動作するプログラムを作れる
Julia --> あまりにも面倒で断念

Python がベターなところ:

  1. IDE の Spyder を使うと、その中でだいたいの作業ができる
  2. matplotlib があるので簡単に結果のグラフを作れる
  3. Numpy, Scipy, CVXOPT のデータ構造は、錐計画問題に使うにはそれぞれが不完全であるが、データ変換で連携させれば錐計画問題については一通りのことができる
  4. プロファイリングも簡単
  5. ドキュメントが整備されていて、Spyder の object inspector で簡単に見ることができる


Julia がベターなところ:

  1. よく使う行列演算がMatlabと同じ感じで使える (inv などが標準で使用可能)
  2. 行列の操作も Matlab に似ている ( A = [1 2; 3 4] で 2x2 の行列を作れる)
  3. パッケージ管理で、 Pkg.add("パッケージ名") と簡単に追加できる (git を内部的に利用している。)
ちなみに、Julia を今回断念した理由としては、

  1. グラフ描画の Gadfly が使いづらい。
    plot を複数回に分けて書けないので、グラフに必要なデータをすべて保持してから、一度の plot でグラフを完成させないとならない。
    また、サンプルにあるものは実行できるが、ドキュメントが足りないので、サンプル以外の内容を実行しようとするとソースを見ないと分からない。
    Python の matplotlib を呼び出すこともできるが、だったら Python のほうが便利。
  2. cd, pwd, ls (または dir) などでディレクトリの移動、ファイル名を取得するのが面倒。
  3. 標準的なIDE とされている Juno が使いづらい。
    Vista にも対応、とホームページには書いてあるが、実際には Vista では使用不可だったりする。
    また、Ctrl+Return でエディタに書いてある式を評価してくれるが、結果がエディタ部分に表示されたり、コンソール部分に表示されたり、両方確認する必要がある。むしろ、コンソール部分だけに集約してくれた方が表示されているかどうかを確認しなくて済む分、分かりやすい。
  4. ドキュメントが足りないので、ほとんどのことを Google などで検索する必要がある。
  5. プロファイリングでは時間での計測ではなく、関数呼び出し回数の計測。
といったあたり。
やはり、 Julia と比較するとmatlplotlib, Spyder, ipython が Python を使ううえで非常に強力で、このあたりを Julia に移植と Julia の使いやすさがアップするのでは?と考えてもいる。
今の Julia は Python のライブラリがないとうまく処理できない部分が多いので、Julia を使うためには Python も覚えたほうが効果的である。


0 件のコメント:

コメントを投稿