答えのほとんどはポイントを取得しません。
matlab が非常に優れており、広く使用されている理由は 1 つあります。
非常に高速なコーディング
私はコンピューター ビジョンの博士課程の学生で、matlab を 4 年間使用しています。博士号を取得する前は、C++、java、php、python などのさまざまな言語を使用していました。コンピューター ビジョンの研究者のほとんどは、もっぱら matlab を使用しています。
1) 研究者は迅速なプロトタイピングを必要としています
研究環境では、(うまくいけば) しばしば新しいアイデアが生まれ、その方向性を維持する価値があるかどうかを確認するために、それらを非常に迅速にテストしたいと考えています。そしてほとんどの場合、コードのほんの一部しか役に立ちません。
Matlab は実行時に遅くなることがよくありますが、あまり気にしません。どの方法が成功するかは事前にわからないため、多くのことを試す必要があるため、ボトルネックはプログラミング時間です。コードはほとんどの場合、結果を公開するために数回実行されるためです。全て。
それでは、matlab がどのように役立つか見てみましょう。
2) 必要なものはすべてそろっている
Matlab には本当に必要な関数がたくさんあるので、常に再発明する必要はありません。
行列のインデックスを 2 次元座標に変更:ind2sub
画像のすべてのパッチを抽出: im2col
; 画像のヒストグラムを計算します: hist(Im(:))
; リスト内の一意の要素を見つけますunique(list)
。行列のすべてのベクトルにベクトルを追加しbsxfun(@plus,M,V)
ます。n次元配列の畳み込みconvn(A)
; コードのサブ部分の計算時間を計算します: tic; %%code; toc
; 画像をトリミングするためのグラフィカル インターフェイス: imcrop(im)
;
リストは非常に長くなる可能性があります...ヘルプを使用すると、非常に簡単に見つけることができます。
それに最も近いのはpythonです...しかし、pythonでは面倒です。必要な関数の名前を探すために毎回Googleにアクセスする必要があり、パッケージを追加する必要があり、パッケージには互換性がありません別のもの、行列の形式の変更、畳み込み関数は double のみを処理しますが、char を指定してもエラーは発生しません。間違った出力を与えるだけです...いいえ
3) 統合開発環境
例: スクリプトを起動します。マトリックスのためにエラーが発生します。コマンドラインでコードを実行できます。私はそれを視覚化します: imagesc(matrix)
. マトリックスの最後の行がおかしいことがわかります。バグを修正します。すべての変数はまだ設定されています。残りのコードを選択し、F9 を押して選択を実行すると、すべてが続行されます。そのおかげでデバッグが速くなります。
Matlab は、実行前に私のエラーのいくつかに下線を引いています。そのため、問題がすぐにわかります。コードを高速化する方法を提案しています。
IDE にはすばらしいプロファイラーが含まれています。それに比べてKCahcegrindは使いづらい。
Python の IDE は素晴らしいです。ipython なしの python は使用できません。ipythonを使用してデバッグすることはできません。
+オートコンプリート、関数引数のヘルプ、...
4) 簡潔なコード
行列のすべての列を正規化するには (常に必要です)、次のようにします。
bsxfun(@times,A,1./sqrt(sum(A.^2)))
行列から小さな合計を持つすべての列を削除するには:
A(:,sum(A)<e)=[]
GPU で計算を行うには:
gpuX = gpuarray(X);
%%% code normally and everything is done on GPU
私のコードを麻痺させるには:
parfor n=1:100
%%% code normally and everything is multi-threaded
これに勝てる言語は?
そしてもちろん、ループを作成する必要はほとんどありません。すべてが関数に含まれているため、コードが読みやすくなり、インデックスで頭痛がすることもありません。そのため、どのようにプログラムするかではなく、何をプログラムするかに集中できます。
5) 作図ツール
Matlab は、プロット ツールで有名です。彼らはとても役に立ちます。
Python のプロット ツールの機能ははるかに少なくなっています。しかし、非常に厄介なことが1つあります。スクリプトごとに一度だけ図をプロットできますか??? スクリプトに沿っていると、各ステップで内容を表示できません ---> 役に立ちません。
6) ドキュメンテーション
すべてに非常にすばやくアクセスでき、すべてが非常に明確で、関数名が適切に選択されています。python では、私は常にグーグルのものを調べたり、フォーラムやスタックオーバーフローを調べたりする必要があります....完全な時間の浪費です。
PS: 最後に、私が matlab で嫌いなもの: その価格