グレーな道を進む

半端研究者の備忘録と日記です.主に,アルゴリズムやプログラムに関する話題を書こうと思っています.

Pythonを使い始めて一か月の元matlab使いの感想

記事で書き出したのは最近ですが,Pythonを使いだしてなんだかんだ一か月ぐらい経ちます. その間,会社の測定データを読み込んだり,スパース最適化アルゴリズムを組んだり,乱数列を生成したりした.

そろそろ一度,Pythonについて思ったことを書こうと思った. 以降,私の環境のPython3.5+Spyderを前提に書きます.

Python(+spyder)の使い勝手

個人的には,結構満足しています(というかIPythonが便利).
95%ぐらい満足.本格的にPythonに研究環境移行をすることを決心したぐらい.
ただし,僅かながら不満はあります.以下,満足,不満の順で書きます.

満足な点

ライブラリの選択の自由度が高い,類似関数が多い

良くも悪くもライブラリの選択肢が多い.また,ライブラリの種類の多さはフリーのプログラム言語としては仕方ないし,別に悪いことではないと思います.

類似関数に関して初めはちょっと混乱するが,(上で挙げたCtrl+Iなどの)補助機能が充実しているので問題になりません.逆に,仕様が明確になると類似関数でも出来ることが違うのでそこを生かした使い方が出来ます.この話に関しては,いずれ機会があればもう少し詳しく書きます.

この点を不満点とするか否かが,Pythonに関する付き合い方を決めると思う. 個人的に選択肢の自由度が高いことはメリットです.自分で満足したものを選べる(ない場合は作るのだが)ので.そこが面倒と感じる人には,不満点となるでしょう.

関数(ライブラリ)作成が楽

matlabでは関数を作成する場合は,関数ごとにファイルを作る必要があった. これに対して,Pythonの場合は関数群をまとめて一つのファイルを作成することが出来る.

つまり,matlabだとfuncs1, funcs2という関数を作る場合,

funcs1.m

funcs2.m

というファイルを作る必要があるが,Pythonの場合は

mylib.py

というファイルを作って,この中にfuncs1(), funcs2()という関数を作成すればよい. これは,むしろmatlabが特殊だったという話なのだが,matlabから見たpythonということであえて書きました.

このメリットは,特定のカテゴリに属する関数群を一つのファイルに纏めておけることです. matlabを使っていて,かつ関数を自作しないひとにはあまりメリットを感じないみたいですが...

Ctrl+Iが便利

spyderというか,IPythonのメリットのような気がするが. 関数名の上で「Ctrl+I」すると,関数のヘルプが読める(matlabにおけるhelp XXに相当する). これが非常に便利.あと,説明が過不足なく適切なことが好感を持てる.matlabを使い始めた時の関数説明に対する感触に近い.これで一気にPythonとの距離が縮まりました.

f:id:gara14:20160807105741p:plain

プロットが楽
matplotlibを使うことでmatlabと同じ感覚でプロット出来ます(一部そうでもないですが). これが本当に同じ感覚で書けるので楽です.すごく簡単な例を挙げると,matlabでは

figure(1);
clf;
plot(x);

って書くに対して,pythonでは

figure(1);
clf();
plot(x)

と書くことになります.コード:test_plot_subplot.py - Google ドライブ. どうしても,処理→有効性の確認・検討→改良といった手順は必要になるので,「確認」の効率を上げる意味でプロットの楽さは重要です.ここも好感が持てました(まあ,細かい不満もありますが).

不満足な点

不満点として書くが,本質的にはそこまで問題ではない.改善して欲しいなーくらいの感覚.

図全般:特にsubplot
使い始めたときは,きれいなプロットだと思ったのですが...matlabと比べるとやはりいまいち.特にsubplotを使ったときの,labelの扱いが雑なのがなんとも.実際にプロットすると次のような感じになる(上のコードのコメント部分).

f:id:gara14:20160805191245p:plain

隣の図の軸にラベルが重なってしまう...とはいえ,論文などで図を使う場合は,最終的にイラストレータで加工してから載せるので問題ないっちゃ問題ない.まあ,調査不足感があるのでもう少し探る.

Variable Exploler

変数の中身をmatlabと同じ感覚で見れます.助かります.助かりますが,いくつか不満が...

  • 参照のたびに,別ウィンドウが作成されるのが結構邪魔
  • 上で開いた別ウィンドウは更新されない

プログラムを一度実行して,ちょっと結果を見るくらいなら問題にならないのですが,実行→確認→実行を行う場合には結構困る.変数の別ウィンドウが本当に邪魔.今は,意識的に変数ウィンドウを閉じるようにしている.

実際,気になっているのは上の内容くらい.

ネット検索が面倒

要するに,Python2があるため,検索が地味に面倒. Python2との違いに関して,

print "ああ" → print("ああ")

程度だろ?気にするほどではないな.っと思っていました.

甘く見てました.以下のサイト

Python 2.7.x と 3.x の決定的な違いを例とともに

に書いてありますが,Python3ではunicode関連が結構変わったみたいですね.バイナリ操作関連の調査に苦労しました.他にも,python2との差はあるみたいですが,現実問題にならないと実感沸かないのでノーコメントで.

とりあえず,ここら辺に苦労した私は,記事を見るときにバージョンを非常に気にすることになりました.もっと極端に言うと,何かわからないことを検索するときは,"Pyhton XXX"ではなく"Python3 XXX"とすることになりました.

まとめ

不満点も色々書きましたが,結論としてはPython(+spyder)については概ね満足しています. 個人的には,有償無償を抜きにすればmatlab有利,有償無償を考慮するとpytho有利と感じました.