pythonとOctaveの使い分け

前回の記事でOctaveの紹介をしました.

kedarumasan.hatenablog.com


でもこの内容を見て,別にOctaveなんか使わなくてもpython(numpy, matplotlib)で似たようなことできるのに...と思われる方も多いと思います.確かにそうなんですが個人的には数値計算にはOctave,計算以外の処理やツール開発等はpythonという風に使用用途を分けています.

数値計算pythonを使わない大きな理由は下記の2つがあります.

  • インデックス問題
  • pythonの記法(np.array,plt.figure)

 インデックス問題

まずはインデックス問題です.問題といってもこればっかりは言語仕様なのでどうしようもないのですが,pythonのインデックスは0始まり,Octaveのインデックスは1始まりなのです.行列計算とかをする上でインデックスが異なるのはものすごく混乱します.ずっと1始まりのインデックスを使ってきた身として0始まりに変わり身することはできませんでした...

 

pythonの記法(np.array,plt.figure)

もう一つはpythonの記法です.python数値計算やグラフ描画をするならnumpyやmatplotlibをimportして,それぞれnp,pltとして使用するのが必須と思います.そうすると必然的にコードの中にはnp.arrayとかplt.figureとかが羅列されるわけですが,どうにも一文一文が長くなる感じがして嫌でした.Octaveの場合は特に何もimportする必要がないので,よりシンプルでスッキリとしたコードに落ち着きます.これはOctaveが科学計算に特化した言語である特権ですね.pythonの思想は「短いコードで書く」というよりは「誰が見てもわかりやすいコードで書く」というスタンスだと思うので仕方がないのだと思います.

ちなみにmatplotlibで作成できるグラフは見た目,操作性含めOctaveと同等と感じたのでものすごく良いと思っています.

 

AIや機械学習用に最適な言語は?

最後に余談ですが,最近ではAIや機械学習用の言語としてもpythonOctave(Matlab)のどれが良いのかといった話題が出ることがあります.一例として,機械学習の権威であるAndrewNg先生は最初に手を出す言語としてはOctaveが最適だと話していて,自身のCourseraの講義の中でもOctaveを使った課題を出したりしています.

ただ,あくまで最初の取っ掛かりとしてはOctaveが良いというだけで,色々と学んだ後には自分の好きな使いやすい言語でコードを書けば良いとも言っています.当たり前ですが結局は自分の好みですよね.どの言語が自分にとって使いやすいのか,用途に合っているのかを判断するためにも色々な言語に触れてみるのも良いかもしれませんね.

 

Octaveの概要とMatlabとの違い

プログラミング言語はたくさんありますが,皆さんは何を使ってますか?

最近だとやはりpythonが多いのでしょうか.pythonは本当に何でもできて使い勝手が良いですよね.私もよく使います.

pythonの他にもう一つ,Octaveという言語も私は使っています.こちらは知る人ぞ知るという感じでしょうか.ちなみにMatlabだったら知っている,聞いたことがあるという人が多いと思います.実はこのOctaveですが,Matlabの無料版という位置付けでよく使われている言語なのです.

この記事では以下の2点について書いていきたいと思います.

  1. Octaveの概要
  2. OctaveMatlabとの違い

 

1. Octaveの概要

Matlabと言えば科学技術計算に特化したプログラム言語としてよく知られていますが,その高い性能故になかなかにコストも高いです.仕事で使っている人は多くても,個人でわざわざ購入する人はほとんどいないと思います.

ちなみに購入ページはこちら↓

https://jp.mathworks.com/store/

 

それでも便利なMatlabを個人でも使いたい人のために,世の中には無料版Matlabと言えるものがあり,その中の一つがOctaveです.

ちなみに他にもScilab, FreeMatといったものがあるようですが,説明を見る限りMatlabへの完全な互換性はなく,Scilab, FreeMat専用のコードの書き方が必要になりそうな印象です.(実際に使ったことがないのであくまで推測ですが.)

これに対してOctaveMatlabと完全に互換性があります.少なくとも私が使っている限りではMatlab用にコードを書くのと,Octave用にコードを書く場合で両者は全く同一のコードになります.実際に例えばMatlab用に書いたコードをOctaveで実行するとエラーなく普通に動きます.

完全互換性があることの大きなメリットとして,Matlabの公式ドキュメントを参照できることが挙げられます.完全互換性がありコードが全く同一なので「Matlabの公式ドキュメント」=「Octaveの公式ドキュメント」にもなるわけです.どういうことかというと,Octaveを使っていてわからないことが出てきた場合,「Octave 〇〇」とgoogle検索してもあまり資料はなく,あっても英語で書かれてるなんてことが多いのですが,そういう時は「Matlab 〇〇」と検索すれば一番上にMatlabの公式ドキュメントが出てきて,それを見れば大抵のことは解決します.というのもMatlabの公式ドキュメントはものすごく充実しており,しかも日本語にも対応しています.

 

2. OctaveMatlabとの違い

そんなOctaveですが,やはり無料版なので本家Matlabにしかない機能,すなわちOctaveではできないことがいくつかあります.両者の違いを簡単に下記表にまとめてみました.

  Octave Matlab
コスト 無料 有料
GUI
CLI
使える関数の種類 一部使えない 全て使える
Simulink機能 ×

コストについては前述の通り.GUI/CLIというのはユーザインタフェースのことで,昔のOctaveCLI(コマンドラインインタフェース)しかなかったようですが,現在ではGUI(グラフィカルユーザインタフェース)もちゃんとあります.

f:id:kedarumasan:20200627112526p:plain

MacOctave-4.4.1のGUI例(見た目的にもMatlabと遜色ありませんね.)


続いて使える関数の種類についてですが,ほぼ全てのMatlab関数を使えるのですが一部搭載されてないものもあります.例えばプロット関数でいうと,2Dプロットでx軸を共用できるstackedplot関数や3Dプロットのfsurf関数なんかはOctaveには搭載されていません.ただ,stackedplotはsubplot関数で十分代用できますし,fsurfが使えなくてもsurf関数やmesh関数は使えるので何の問題もありません.ちなみに未搭載の関数を実行しようとしたり,helpで参照すると下記のようなメッセージが出てきます.

error: help: the 'fsurf' function is not yet implemented in Octave

Please read <https://www.octave.org/missing.html> to learn how you can
contribute missing functionality.

エラー内容を見ればコードミスではなく,使おうとしている関数が「まだ」搭載されてないことがわかるので親切ですね.「まだ(not yet)」と書いてあるので今後のアップデートで搭載される可能性もあります.

 

最後にSimulink機能ですが,Octaveにはこれに該当する機能はありません.無料故にここまでは流石に対応できないのでしょう.今後のアップデートに期待です.

 

 

以上,長々と書きましたが,Octaveの概要とMatlabとの違いについての記事でした.

 

初めての投稿.

初めての投稿をしてみます.

まずはブログの方針と自己紹介を,はてなブログのツールを試しに使いながら書いてみたいと思います.

この記事の内容を箇条書きにすると,

  1. このブログで書きたいこと
  2. 自己紹介
  3. 今後

こんな感じ.

見出しとかを使いながらそれぞれの内容を書いてみます.

 

1.このブログで書きたいこと 

日常生活や仕事をしていると今でも色々と新しく発見したり,学んだりすることが多いと感じます.

せっかく発見したこと学んだことを忘れてしまったら勿体無いので,後で振り返りできるように自分自身の備忘録としてこのブログを使っていきたいと思います.それが自分の財産にもなるし,もしかしたらブログとして公開することで誰かの役に立てるかもしれません.

 

2.自己紹介 

続いて自己紹介.

電気系の大学で修士まで学び,電機メーカに就職しました.仕事では3D/2D CADを使って機械の設計をしています.

家でも3D CADを使って何かできないかなーと思いFreeCADをインストールしてみましたが,まだあまり触れていません.これから勉強して少しずつ使えるようになりたいと思います.最近では個人で3Dプリンタを所有している人もいますし,MISUMIのmeviyのようなサービスもあるので色々な遊び方ができそうです.

プログラミングはoctave(Matlab)とpythonを勉強中です.特に就職してからは技術計算をしたり,業務ツールを作ったりとプログラムを書くことが多々あるのですが,コードを書くときはいつもgoogle検索で先人たちの知恵に助けてもらっています.そこで学んだ内容は時間が経つと忘れてしまいがちなので,自分のためにやったことを残していくのが大切だと感じます.

 

3.今後

これから少しづつ記事を更新していきたいなと思います.最近はコロナのせいで土日にあまり外出もできないので執筆活動に勤しむとします.

頑張るぞー!