jtwp470’s blog

日記とかプヨグヤミングとか

Python vs MATLAB

この記事はPython vs Matlabという記事を読んで感想や追記を入れた記事です.全訳はしていませんし和訳は結構適当です. したがってきちんと記事を理解したい場合は原文を読むことをおすすめします.

なんでこの記事を書こうと思ったのかの動機

今私は大学2年です.春学期(前期)に初めてMATLABというソフトウェアを使い,簡単な数値計算の講義を受けました.やった内容としては

などです.

ここでMATLABを使う際,いくつかのデメリットにぶち当たりました.

  • MATLABは有料ソフト
  • GNU Octaveなど代替品もあるがなかなか使い勝手が良くない
  • MATLAB言語自体の記法の謎

などです.突然ですが私はPythonが好きです.Pythonを選んだいくつかの理由のうちPythonでは数値計算ライブラリがあり結構充実していることを知っており選んだ経緯があります.そこでMATLABでできることをPythonでやれないか,またはMATLABPythonどっちのほうがいいのか(※いいというのは性能面や使い勝手という部分です)と思い,とりあえずPythonで使う前にいろんな文献にあたってみて調べてみたことをまとめました.しかし,まだPython側のライブラリ(NumPy, SciPy, Matplotlib)などは触ったことがありませんのでご了承下さい.

更に私は数値計算の世界に入り込みたいと考えています.この先に利用するであろうソフトウェアについて知りたくなりまとめたという経緯もあります.

MATLABPython

Python

Pythonプログラミング言語です. 多くのPython処理系がCPythonとも呼ばれるくらいC言語によって書かれており更にPythonには大規模な標準ライブラリがあります.このライブラリにはOS固有の処理やスレッド,ネットワーク,データベースなどのモジュールが含まれています.

Python数値計算を行うには追加でパッケージを導入する必要があり更にIDEも必要でしょう.IDEは自分が好きなIDEを導入して使うことができます.

更にPythonオープンソースで無料でありPythonを拡張するツールを簡単に作成,入手することが可能です.

MATLAB

MATLABは市販の数値計算環境とプログラミング言語です.MATLABのコンセプトはすべてのパッケージ(IDEも)を含んでいることです.標準ライブラリには通常のプログラミングで使われるような機能は含まず,行列計算やデータのプロットなどに特化したライブラリが含まれています.

MATLABの問題

さてMATLABにはいくつかの問題が挙げられています.

  • アルゴリズムが独占されている.つまりあなたが使っているコード中の多くのアルゴリズムの中身を見ることができずその実装を信じなければならないということになる.
  • MATLABはとても高価である.つまりMATLABで書かれたコードを実行できるのはライセンスを買った者のみに限られてしまう.
  • MATLAB用のサードパーティ拡張機能を作成するのは難しいか不可能であるということ

MATLABの優位点

  • Simulinkの良い代替品がない
  • 必要なパッケージが全て含まれているため初心者にはやさしい.(Pythonでは自身で環境整備やIDEの導入などをしなければならない)
  • 大きな数値計算コミュニティがあり多くの大学で使われている.

Pythonの優位点

  • 無料であること (コストをかけずに済み,ソースを見たり修正することができる)
  • 美しいプログラミング言語 Pythonは簡単に読むことができるように設計された言語である.
  • 強力である Pythonは非常によく設計されており自分の考えを容易にコードに変換できる.さらにPythonは大規模な標準ライブラリを持ちその中にはさまざまなデータを格納できるリスト,セット,辞書などがある.これらは本当にデータをまとめるときに役立つ.
  • 名前空間
  • 強力な文字列処理
    Pythonでは信じられないほど簡単にできる.
  • 移植性 Pythonは無料のためWindows, Linux, OS Xなどどの環境でも自分のコードを動かすことができる.
  • クラスや関数定義 クラスや関数の定義をどこでもできる.
  • すばらしいGUIツールキット Pythonでは見た目が良くしっかり動作するGUIアプリケーション開発ができる.

PythonMATLABの性能差

SciPyのWikiによる情報.(ref to 参考文献)

ここではどうやらラプラス方程式(2階線形楕円形微分方程式)を解いているようです.申し訳ないのですがラプラス方程式に関しては教養が無いためわかりません.

ここではどうやらいろんな言語やライブラリで実行した結果が載っているようなので必要なものだけを取り出しました.

解き方 所要時間(秒)
Pure Python(推定) 1500.0
Python + NumPy 29.3
Inline 4.3
Fast Inline 2.3
Python embeded Fortran 2.9
Pyrex/Cython 2.5
MATLAB(推定) 29.0
Pure C++ 2.16

きちんと原文を読まなかったため適当なことを書いていたらごめんなさい.

  • Pure PythonPythonのみで書いた場合
  • Python + NumPyはPure PythonのコードをNumPyで書きなおした場合
  • InlineはPythonのコード中に直接CやC++を埋め込んで実行した場合
  • Fast InlineはどうやらInlineに埋め込んだコードを改善したものらしい
  • Pyrex/CythonはPythonコードをC/C++に変換しちゃうヤバイやつを使った場合

らしいです.MATLABよりは速く動作するみたいですね.

なおC++で書くと一番速いようですが使うのは大変ですね

参考文献