MATLABとPython、どっちが良いのでしょうか?

こんにちは。

小澤泰生@逗子で在宅勤務中、です。

みなさま、いかがお過ごしでしょうか?

日々お客さんと接する中で、色々と質問を受けるので、
今回は、質問への回答を、メルマガにしてみました。
(この記事は、メルマガに書いた記事の転載です。)

ご質問内容は、

「MATLABとPython、どっちが良いのでしょうか?」

というものです。

この質問をいただくことは、良くあります。

結構、ざっくりとした質問なので、
お客さんの背景や、課題の内容によって、
回答は異なってくるのですが、
今の時点での、私なりの回答を述べようかな、と思います。

同じような疑問や問題意識をお持ちの方がいらっしゃれば、
少しは参考になるかも、と思ったので。

言語的な仕様の話とかではなく、
開発側からの視点で、(ざっくりと)述べたいと思います。

テーマとして、画像処理や信号処理、機械学習等を
使ったデータ解析を考えている場合を前提として
話をします。

(0)そもそもの話

大雑把に言うと、MATLABでも
Python(+OpenCV+Keras+Tensorflow等)でも、
出来ることは、どちらを使っても出来る、
と思います。(おいおい…。)

逆に言うと、できない問題は、どっちを使っても
できないので、(仕事上は)ここの部分の最初の見極めが
結構重要だったりします…。

それで、MATLABとPythonを比較した時に、
良くも悪くも効いてくるのは、
MATLABはMathWorks社が出している
有料のプラットフォームだ、と言うことです。

Pythonはオープンソースなので、無料です。

なので、値段で選ぶなら、Pythonです(笑)。

ただ、通常、大切なのは価格よりも価値だと思うので、
要は値段以上の価値があるかどうかが大切な訳です。

これから、MATLABとPythonの比較を
いくつか述べます。
(以下、MATLABもPythonも、ライブラリを含めた
 プラットフォームという意味合いで述べています。)

(1)開発したソースコードがそのまま動くかどうか?

まず開発側のメリットは、
MATLABはMathWorksが管理しているので、
こちらで開発したソースコードが、
そのままお客さんのPCで動くこと、
です。

「はぁ、そんなの当たり前じゃん」

と思うかもしれませんが、Pythonだと、
実は結構難しかったりします。
(私の経験だと、そのまま一発で動いたことは、あまり無いです。
 Anacondaを使って、素直にインストールする場合は、
 そのまま行ける時もあります。)

Pythonはご存知かもしれませんが、本体とライブラリで、
様々なバージョンがあり、その組み合わせと、OSの組み合わせも
あって、同じ環境をゼロから、お客さんの手元で再現するのは、
結構難しいと感じています。

なので、せっかく開発したのに、
お客さんのところで動かない、というのは
結構辛い状況でして、この場合、
次のどれかの手段になります。

・お客さんのところに出向いてインストールする
・(お客さんのPCにリモートで入っても良いなら)
 リモートでPCにインストールする
・PCを用意して、それにインストールして、PCごと送付する
・(クラウドを使って良いなら)クラウド上に用意する
・Dockerのような仮想環境で送付する

という話になります。

「Dockerだったら、全く問題無し!」

というお客さんはそれで良いと思いますが、
「なんだそれ?」という方も結構いらっしゃると
思うので、その場合は、お客さんのところに
出向いてインストールとかになり、
結構工数が増えたりします。

また、OS依存の話もあって、
MATLABは、WindowsでもMacOSでもLinuxでも、
作ったコードは、ほとんどの場合、変更無しでそのまま動きます。

なので、私もMATLABでプログラムを開発する場合は、
午前はMacで作って、午後はWindowsのPCで作る、
みたいなことも良くやってますが、
OSの切り替えに関しては、全く意識することは無いです。

けれども、Pythonの場合は、そういう訳には行かないので、
最初にOS環境とかも、ちゃんと聞いておかないと、
後々問題になったりします。

ここの部分は、標準的なプログラムを開発している場合は、
あまり問題にならないのかもしれませんが、
開発側としては、変なところで工数がかかるリスクは、
やっぱり見積もってしまいます。

(2)ヘルプや解説、例や、アルゴリズムが信用できるか?

開発側の次の視点としては、
開発する上で、分からないことや、参考にする実装例、
みたいなのが、絶対必要になります。

その際に、MATLABの場合は、MathWorksが管理している
ヘルプや例が結構充実しており、また例で挙がっているコードも、
そのままMATLABで動作します。

これもある意味、当たり前の話と思われるかもしれませんが、
Pythonの場合は、いろんな人がいろんなblogとかで、
いろんなコードを出しており、どれが信用できるものなのか、
よく分からなかったりします。

また、サンプルコードも、あるバージョンでは動作したが、
今のバージョンでは動かない、とかいうのが、
結構沢山あり、何が言いたいかというと、
開発する上で、とりあえず試してみたり、手戻りしたり
することが、とても多い、ということになります。
(つまり工数が増える。)

あと、地味な話ですが、ライブラリの処理に使われている
アルゴリズムですが、この中身が何かという話で、
MATLABはブラックボックスなんですが、一応ヘルプに
アルゴリズムは書かれているし、ライセンスを購入していれば、
MathWorksに問い合わせれば、本当のところを回答してくれます。

一方Pythonはオープンソースということもあり、
各ライブラリのアルゴリズムのソースコードも、公開されてます。
けれども、公開されているからと言って、じゃぁ自分でそれを
読み解けるか、というのは、別の話です。

で、お気づきかもしれませんが、
上記の(1)(2)は、実は本来のプログラム開発には
関係無い部分の話で、そこに工数がかかるのは
どうなのか、という話でもあります。

もちろん、私はMATLABが得意で、Pythonは、まだそんなに
得意じゃ無いので、MATLABに甘いコメントになっている
ことは、差し引いて読んでください。

では、Python開発のメリットは何か、
という話です。

(3)Pythonは今もメジャーだし、これからもっとメジャーになる(と思う)

やっぱり「無料」というのは大きくて、
Pythonは今でも使っている人は多いし、
これからも、どんどん人口は増えると思います。

たぶん、上述の(1)(2)の問題も、
そのうち誰かが解決してくれると思います。

また、使えるライブラリも(玉石混交ですが)、
多いです。使える関数も、MATLABよりは多いです。

なので、一部の課題に関しては、Pythonには関数があるけど、
MATLABには無いものもあるので、その場合は、
Pythonでの開発になると思います。

(4)学会とかで発表される最新のコードを使える

ここ数年、CVPR(コンピュータビジョンの米国の学会)とかを
見ていると、何年か前までは、実装はMATLABというのも
ありましたが、最近はPythonが多いです。

MATLABの実装は、学会発表されてから、MathWorksが
実装するので、発表の時点から、大体1~2年
(あるいはそれ以上)のタイムラグが生じます。

なので、最新のアルゴリズムを使いたい場合は、
やっぱりPythonになると思います。

ざっくり述べて来ましたが、いかがでしたでしょうか?

もちろん、言語的な仕様の話とか、
オブジェクト指向で開発するならPythonの方が
向いてるかも、とか、他にも色々比較する点は
あると思いますが、

ま、開発する側から見て、今の時点での私の感想を
述べました。

それで、弊社のスタンスとしては、
MATLABとPython、どっちで開発するか、
ですが、

(1)MATLABで開発が必須の場合は、MATLAB
(2)Pythonで開発が必須の場合は、Python
(3)お客さんが、どちらでも良い、の場合は、基本MATLAB。
   ただ、Pythonで無いと実現できない機能が
   ある場合は、Python。

ということになります。

これは、現時点での判断で、今後、私のPythonのスキルも
上がって行くと思いますし、状況も変わって行くと思うので、
また考え方に変化が生じれば、
メルマガ等でお知らせしようかな、
と思います。

ということで、少しでも参考になれば、
嬉しいです。

それでは。