はじめに
MATLAB,Python,Scilab,Juliaの機能説明や比較のページ。
内容的には以下を想定しているが、まずは行列の存在意義みたい話も入れている。
途中、行列,ベクトルを扱う都合上、線形代数の基礎の話も。
- 単純計算
- ベクトル行列計算
- 関数の作り方
- グラフ表示
これら基礎的な部分に加え、以下も取り扱う。
- 伝達関数
- 状態空間モデル
- ニュートンの運動方程式
- DCモータ
- DCモータ状態空間モデルをPID制御
- 最小二乗法、正規方程式、単回帰、重回帰、多項式回帰
- 画像、動画取り込み
- 画像畳み込み
- ガウシアンフィルタ
- 微分フィルタ
- 座標変換
- アフィン変換
- 射影変換
- 分類問題
- 形式ニューロン
- 単純パーセプトロン
- 多層パーセプトロン(ニューラルネットワーク)
Pythonで動かして学ぶ!あたらしい線形代数の教科書
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
ゼロからはじめるPID制御
恋する統計学[回帰分析入門(多変量解析1)] 恋する統計学[記述統計入門]
Pythonによる制御工学入門
理工系のための数学入門 ―微分方程式・ラプラス変換・フーリエ解析
※ 文字数/画像数が多いためかページが重くなったのでページを分割しました。
問答形式でゆる~く行列やらなんやらをやってるシリーズ
内容的には本ページと被ってるが、ゆる~く学びたい人はこっちのシリーズの方が良いかも。
発端
私は仕事やら趣味やらでMATLAB,Python,Scilab,Juliaを行ったり来たりしているうちで脳内が混乱をきたすことがある。
- MATLAB:仕事用。どちらかというとSimulinkの利用がメイン。有償。
- 単体で30万円くらい。
- Simulink:40万円ちょい。
- StateFlow:40万円ちょい。
- Simulink Coder:40万円ちょい。
- Embedded Coder:70万円ちょい。
- Python:ディープラーニング勉強用&仕事上のちょっとした計測データの整形用。無償。
- Scilab:自宅での実験用。この実験が仕事としてMATLAB側で再構築されることもある。無償。
- Julia:自宅での実験用。ポストPythonとも呼ばれてるらしく、ちょいちょい利用し始め。無償。
(どれもWindows、Linux、Macで使用可能。)
自分で組む場合は、「あ、しまった。間違えた」でやり直せばOKなのだが、まれに人前で即興で組むことがある。
ここで変に間違って手間取るとちょっと恥ずかしい。
まぁ、シレっと何事もなく書き直すのだけども、実は内心としてはかなり恥ずかしいのを耐えている状態。これは精神衛生上よろしくない。
特にMATLABとScilabに似すぎてる割には関数呼び出しのメカニズムの違いに振り回されるし、Pythonは他2つと比べるとベクトル行列表現が結構違うので、MATLABでPython的に記載して、「狙った通りうごかん。なぜじゃ」ってなる。逆も然り。
よって、ここいらで、自戒の意味を込めて入門的な部分から整理しようと思い立った。
割とどうでも良い差分(超重要)
Pythonちゃんはいるけど、MATLABちゃんとScilabちゃんはいない!!
Pythonちゃん(paizaの「コードガールこれくしょん」のキャラらしい)
武器:大型セミオート式狙撃銃(孤独でクールなスナイパー)
無駄なおしゃべりが苦手で受け答えはいつも完結、誰が相手でもクールに接する女の子。そのクールさや公平さに憧れるファンも多いようです。ペットのヘビを常に連れており、彼女に興味はあるけどヘビが怖くて近づけない……という人もいるとかいないとか。
画像は以下から拝借。
まぁScilabちゃんが居ないのは仕方ないが、
MATLABちゃんくらいは居てもいいんじゃないかとは思う。
ここらへんの差で学習のモチベーション変わるかもしれないし。(←え?)
(これ以降はまじめに書きます。)
MATLAB、Python、Scilab、Juliaの説明
MATLABとは
MATLAB(マトラボ)は、アメリカ合衆国のMathWorks社が開発している数値解析ソフトウェアであり、その中で使うプログラミング言語の名称でもある。MATLABは、数値線形代数、関数とデータの可視化、アルゴリズム開発、グラフィカルインターフェイスや、他言語(C言語/C++/Java/Python)とのインターフェイスの機能を有している。
Wikipediaより(https://ja.wikipedia.org/wiki/MATLAB)
自動車業界ではデファクトスタンダードなツールになっている。
弊ブログは自動車業界関連の情報が多いため、結果的にMATLAB関連の記事も多くなる。
興味ある方はどうぞ。
Pythonとは
Python(パイソン)は、汎用のプログラミング言語である。コードがシンプルで扱いやすく設計されており、C言語などに比べて、さまざまなプログラムを分かりやすく、少ないコード行数で書けるといった特徴がある。
Wikipediaより(https://ja.wikipedia.org/wiki/Python)
Pythonをガッツリ学習したい場合はオンライン学習サービスなどもあります。
オンラインPython学習サービス「PyQ(パイキュー)」公式ページ
ポイント
- 環境構築不要
- ブラウザだけで学習を始められる。
- 申し込みから4ステップで登録を完了
- 申し込み完了待ちとかない。すぐ始められる。
- 1,000問以上の実践的な課題がある。
尚、弊ブログでは自動車業界ならではのPython利用方法について、かなりの数の記事を書いている。
一般的なPython利用とは大きく異なるものではあるが、「こういった世界もある。」って程度でも良いのでご覧くだされ。
Scilabとは
Scilab(サイラボ)とは、1990年からフランスのINRIA(Institut National de Recherche en Informatique et en Automatique、国立情報学自動制御研究所)とENPCで開発されているオープンソースの数値計算システムである。
Wikipediaより(https://ja.wikipedia.org/wiki/Scilab)
基本的にはMATLABが自宅学習用としては高価すぎるので、その変わりとして利用&導入している。
そのため、弊ブログの割と古めの記事はScilab関連のものが多い。
本来であればMATLAB/Simulinkでやりそうなことを無理やりScilabでやっていたり。
そういった試行錯誤をしてるとなぜがMATLAB/Simulinkの使い方も上手くなってしまうのが面白い点。
興味ある方は以下からどうぞ。
Juliaとは
Julia(ジュリア)は、汎用プログラミング言語水準から高度の計算科学や数値解析水準まで対処するよう設計された高水準言語かつ仕様記述言語、及び動的プログラミング言語である。並行計算、並列計算、分散コンピューティング、及びAdapter パターン不要でC言語やFORTRANへのForeign function interfaceに対応している。ガベージコレクションを行い先行評価を用いるほか、浮動小数点数計算、線型代数学、高速フーリエ変換、正規表現照合のライブラリを利用できる。
Wikipediaより(https://ja.wikipedia.org/wiki/Julia_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E))
JITコンパイルが特徴的。
実行時コンパイラ(じっこうじコンパイラ、Just-In-Time Compiler、JITコンパイラ、その都度のコンパイラ)とは、ソフトウェアの実行時にコードのコンパイルを行い実行速度の向上を図るコンパイラのこと。通常のコンパイラはソースコード(あるいは中間コード)から対象CPUの機械語への変換を実行前に事前に行い、これをJITと対比して事前コンパイラ (Ahead-Of-Timeコンパイラ、AOTコンパイラ)と呼ぶ。
Wikipediaより(https://ja.wikipedia.org/wiki/%E5%AE%9F%E8%A1%8C%E6%99%82%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%A9)
C言語みたいに事前にコンパイルするわけじゃなく、
実行して時に必要な時に必要範囲をコンパイルする。
初回実行時はJITコンパイルが入るから見た目上の処理は遅いけど、
2回目以降は恐ろしく速い。
って性質になる。
文法はMATLABにかなり似ている。
MATLAB,Python,Scilab,Juliaの個人的所感
MATLAB、Scilabはそっくりさんです。
MATLAB側に特殊なtool boxを入れなければ大体Scilabでいけることが多い。
ただ、オードコード生成とかsimulink+他のベンダーツール連携とか高度なことをしようとするとScilabでは辛くなる。
上記2つと比べるとPythonは本来であれば全く別物になる。
しかし、Pythonで使用できるNumPyというパッケージがベクトル、行列の定義と演算を可能にし、数値計算の領域に於いてもMATLAB、Scilabとタメを張れる状態になった。
機械学習、ディープラーニングでPythonが良く使用されるのはこのNumPyのおかげと思って良い。
JuliaはポストPythonという位置づけのようで、今のうちにちょいちょい手を出しておくのもありだと思う。
どれから勉強するのが良いのか?
同僚、部下から質問されることとして以下が多い。
- MATLABとPythonのどっちから勉強するのが良いのか?
- MATLABを勉強したいが有償であるため、個人で学習し難い。
- Scilabで勉強しても結局MATLAB、Pythonを勉強し直すのでは?
- Pythonの方が流行ってるからPythonの方が良いんじゃね?
どれもごもっともな質問。
結論としては目的ありきとしか言いようがない。
例えばMATLAB独自のツールキットを利用して生産性を上げたい場合、MATLAB以外の選択肢はない。
しかし、単にベクトル・行列の演算を経てのアルゴリズムの検証をしたいというレベルであれば、
どれを選択しても勉強し直すほどの労力は要らない。
まぁ機械学習系になるとPythonのライブラリが豊富だったりするので、Pythonを勧めることにはなるが、ちょっとしたデータ加工程度であれば、どれから始めても差はないだろう。
最後の「Pythonの方が流行ってる」ってのは確かに同意ではあるのだが、「だからPythonを選択」ってはちょっと違う気がする。
まぁ流行っているが故に「ネット上の情報多く勉強し易いから」とか「文献等に出てくる新しいアルゴリズムがPythonであることが多いから」って理由であれば正当でしょう。
行列の存在意義
なにはともなれ、なんで行列なんて使うの?
という疑問を持ってる人向けの記事。
基本的な使い方
Matlab | python | Scilab | Julia | |
---|---|---|---|---|
コメント | % | # | // | # |
結果の非表示 | ;(セミコロン) | ;(セミコロン) | ;(セミコロン) | ;(セミコロン) |
複数行での入力 | …(ピリオド三つ) | \\\\ | …(ピリオド三つ) | カッコ等でくくることで複数行でも記述可能 |
要素指定 | 1スタート | 0スタート | 1スタート | 1スタート |
要素抜き出し終端指定 | 終端指定 | 終端の次を指定 | 終端指定 | 終端指定 |
列要素維持 | 維持する | 維持しない | 維持する | 維持する |
特に要素指定がpythonだけ0スタートの点に注意。
後になって「全部手直しやー!」ってことになる。
(添え字の0スタートを0オリジン、1スタートを1オリジンと言ったりする。)
MATLABの基本的な使い方
Pythonの基本的な使い方
Scilabの基本的な使い方
Juliaの基本的な使い方
行列演算
- 各種行列演算を説明。
- 本質的には線形代数学の基礎部分を把握しないと、なぜこんな計算になるかは見えない。
- 計算都合で生まれたものもある。
- 転置など。
線形代数学の基礎
- 内積はベクトル表記と成分表記の公式がある。
- 成分表記の内積は余弦定理から求められる。
- 行列は方程式の係数部をまとめたもの。
- 行列演算は入力ベクトル、変換行列、出力ベクトルが基本形。
- 入力、出力をnセットに拡張すると列ベクトルがnセット分の列が増えの行列になる。
各ツール、言語で行列演算
Pythonの乗除がやや異なる点に注意が必要。
Pythonは逆順スライシングを利用した反転、Scilabは要素数$を利用した反転の仕方がある。
MATLABの行列演算
Pythonの行列演算
Scilabの行列演算
Juliaの行列演算
ユーザ関数作成
それぞれ以下の性質がある。
MATLAB:ファイル名=関数名
Python:importでファイル名指定
Scilab:基本はワークスペース内で定義。ファイルとして作成することもできるが、利用前に定義スクリプトを走らせる必要がある。
MATLABのユーザ関数作成方法
Pythonのユーザ関数作成方法
Scilabのユーザ関数作成方法
Juliaのユーザ関数作成方法
次のページへ
次は波形表示、伝達関数、状態空間モデルについて
コメント