MATLAB は何に役立つのでしょうか?なぜ大学でこれほど使われているのでしょうか?Python よりも優れているのはどのような場合ですか?[閉まっている]

StackOverflow https://stackoverflow.com/questions/179904

  •  05-07-2019
  •  | 
  •  

質問

最近、クラスで MATLAB の基本を学ぶように頼まれました。

研究者や大学で働く人々にとって、何がそんなに素晴らしいのでしょうか?行列を操作したりプロットしたりするのは素晴らしいことだとわかりました...(いくつかのライブラリを使用して Python で簡単に実行できること)。

関数を書いたりファイルを解析したりするのは本当に苦痛です。まだスタート地点に立ったばかりですが、何が足りないのでしょうか?

「現実」の世界では、それを何に使うかを考えるべきでしょうか?Python より優れたパフォーマンスを発揮できるのはどのような場合でしょうか?より良く言えば、次のことを意味します。何かパフォーマンスを発揮するものを書く簡単な方法。


更新 1: 私が最も知りたいことの1つは、「私は何かが足りないのですか?」です。 :d

更新 2: ご回答ありがとうございます。私の質問は、MATLAB を買うか買わないかということではありません。大学は、ライセンスを無効にすることなく、MATLAB の古いバージョン (おそらく MATLAB 5) のコピーを無料で提供してくれる可能性があります。私はその機能に興味があり、さらに深く研究する価値があるかどうかに興味があります (それ以上のものは必要ありません) 基本的な 試験に合格するためには MATLAB が必要です :P ) 現実世界の特定の種類のタスクでは、Python よりも MATLAB の方が優れています。

役に立ちましたか?

解決

アダムは部分的にのみ正しい。ほとんどではないにしても、多くの数学者がそれに触れることはありません。コンピュータツールがまったく使用されている場合、 Mathematica または Maple 。一方、エンジニアリング部門は多くの場合それに依存しており、一部の応用数学者にとって間違いなく有用なものがあります。また、いくつかの分野の産業で頻繁に使用されています。

MATLABについて理解しなければならないことは、 Fortran ライブラリのラッパーとして始まったことです。線形代数の場合。長い間、それは<!> quot;すべての世界はdouble(floats)<!> quot;の配列であるという態度でした。言語として、非常に有機的に成長しており、プログラミング言語として見た場合、非常に焼き付けられたいくつかの欠陥があります。

ただし、特定の種類の研究を行うための環境として見ると、いくつかの本当の長所があります。これは、浮動小数点線形代数を実行するのと同じくらい優れています。表記はシンプルで強力で、実装は高速で信頼できます。プロットやその他のインタラクティブなタスクの生成に非常に優れています。特定のタスクに適したコードを備えた手頃な「ツールボックス」が多数あります。数値コードを共有するユーザーの大規模なコミュニティがあります(Python + NumPy は同じリーグには何もありません、少なくともまだ)

Python、いぼ、その他すべては、はるかに優れたプログラミング言語です(他の多くの言語と同様)。ただし、ツールに関しては10年ほど遅れています。

重要な点は、MATLABを使用する人々の大部分はプログラマーではなく、そうなりたくないということです。

一般的なプログラミング言語にはお粗末な選択です。風変わりで、多くのタスクに時間がかかり(効率的なコードを取得するためにベクトル化する必要があります)、外界との統合が容易ではありません。一方、得意なことに関しては、非常に優れています。比較するものはほとんどありません。合理的なサポートを提供している会社があり、その会社に何人年を費やしたかを知っています。これは業界では重要です。

厳密にPythonとMATLABの比較を見ると、それらは主にジョブごとに異なるツールです。それらが少し重なる領域では、より良いルートが何であるかを言うのは難しいです(あなたがやろうとしていることに大きく依存します)。しかし、ほとんどのPythonは、MATLABのコアの長所がそれほど優れているわけではなく、その逆も同様です。

他のヒント

ほとんどの答えはポイントを得ません。

matlabが非常に優れており、広く使用されている1つの理由があります:

非常に高速なコーディング

私はコンピュータービジョンphDの学生であり、4年前からmatlabを使用していましたが、phDの前はC ++、java、php、pythonなどの異なる言語を使用していました...コンピュータービジョンの研究者のほとんどはmatlabのみを使用しています。 / p>

1)研究者は高速プロトタイピングが必要です

研究環境では、(願わくば)しばしば新しいアイデアがあります。そして、その方向で続ける価値があるかどうかを確認するために、それらを本当にすばやくテストしたいと思います。そして、ほとんどの場合、私たちがコーディングするもののごく一部のみが有用です。

Matlabは多くの場合、実行時の速度が遅いですが、あまり気にしません。どのメソッドが成功するかは事前にわからないため、多くのことを試さなければなりません。そのため、ボトルネックはプログラミング時間です。公開する結果、それだけです。

では、matlabがどのように役立つかを見てみましょう。

2)必要なものはすべてすでにあります

Matlabには本当に必要な機能がたくさんあるので、常にそれらを再発明する必要はありません。

マトリックスのインデックスを2D座標に変更します:ind2sub画像のすべてのパッチを抽出します:im2col;画像のヒストグラムを計算します:hist(Im(:));リスト内の一意の要素を見つけるunique(list);行列bsxfun(@plus,M,V)のすべてのベクトルにベクトルを追加します。 n次元配列の畳み込みconvn(A);コードのサブ部分の計算時間を計算します:tic; %%code; toc;画像を切り取るためのグラフィカルインターフェイス:imcrop(im);

リストは非常に長くなる可能性があります... また、ヘルプを使用すると非常に簡単に見つけることができます。

それに最も近いのはpython ...ですが、それはpythonの苦痛です。必要な関数の名前を探すために毎回googleにアクセスしなければなりません。その後、パッケージとパッケージを追加する必要があります。互いに互換性がなく、マトリックスの形式が変更され、畳み込み関数はdoubleのみを処理しますが、charを指定してもエラーは発生せず、間違った出力を出力します... no

3)IDE

例:スクリプトを起動します。行列が原因でエラーが発生します。 コマンドラインでコードを実行できます。実行を視覚化します:imagesc(matrix)。マトリックスの最後の行が奇妙であることがわかります。バグを修正します。 すべての変数はまだ設定されています。コードの残りを選択し、F9キーを押して選択を実行すると、すべてが続行されます。 デバッグの高速化、おかげで。

Matlabは、実行前にいくつかのエラーを強調しています。だから私は問題をすぐに見ることができます。コードを高速化する方法を提案しています。

IDEには素晴らしいプロファイラが含まれています。 KCahcegrindは、それに比べて使用するのが非常に苦痛です。

pythonのIDEは素晴らしいです。 ipythonなしのpythonは使用できません。 ipythonを使用してデバッグできません。

+ autocompletion、関数の引数のヘルプ、...

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つあります。スクリプトごとに1回だけ図をプロットできますか?スクリプトを一緒に持っている場合、各ステップでデータを表示できません--- <!> gt;役に立たない。

6)ドキュメント

すべてが非常に迅速にアクセスでき、すべてが透明で、関数名は適切に選択されています。 pythonを使用する場合は、常にgoogleを検索するか、フォーラムやstackoverflowを調べる必要があります。

PS:最後に、matlabで嫌いなもの:その価格

私は長年にわたって研究でmatlabを使用しています。線形代数に最適であり、よく書かれたツールボックスの大規模なセットがあります。最新バージョンでは、汎用言語により近いものになりつつあります(オプティマイザーの改善、オブジェクトモデルの改善、スコープルールの改善など)。

この夏、Matlabの代わりにPython + numpyを使用する仕事がありました。ペースの変化を楽しんだ。 <!> quot; real <!> quot;言語(およびそれに伴うすべて)、およびブロードキャストアレイなどの優れた数値機能を備えています。私もipython環境が本当に好きです。

Matlabについて私が好むいくつかのことを以下に示します。

  • 一貫性: MathWorksは、ツールボックスの外観と動作を互いに似たものにするために多大な労力を費やしました。彼らは完璧な仕事をしていませんが、それは私が数十年前のコードベースで見た中で最高のものの一つです。
  • ドキュメント: numpyやpythonでいくつかのことを理解するのは非常にイライラすることがわかります。ドキュメントの品質がむらがあるからです。 。 Matlabを模倣しているように見えるが、同じように動作しない ものを見ると、最もイライラします。ソースを取得できることは非常に貴重です(公平を期すために、Matlabツールボックスのほとんどにはソースも同梱されています)
  • コンパクトさ:私がしていることのために、Matlabの構文は多くの場合よりコンパクトです(常にではありません)
  • モメンタム:今変更するMatlabコードが多すぎる

このような大規模な既存のコードベースがない場合、Python + numpyへの切り替えを真剣に検討します。

すべてを保持します。テトリスをプレイするように電卓をプログラムしたのはいつですか? 128KのRAMに必要なものを何でも書き込むことができると実際に思っていましたか?そうではない。 MATLABは、巨大な行列を扱う場合を除き、プログラミング用ではありません。これは、メガバイトからギガバイトのデータをクランチおよび/またはプロットするときに使用するグラフ計算機です。基本的なことだけを学んでください。また、Pythonをグラフ計算機にしようとして自殺しないでください。

MATLABでクランチ、プロット、または探索したいときや、Pythonが提供するすべての機能を使用したいときの感触がすぐにわかります。多くのエンジニアが、PythonまたはPerlでの前処理と後処理に目を向けています。時々、ハードビットのためにMATLABを呼び出すことさえあります。

これらは完全に異なるツールであるため、最初にそれらの基本的な長所を交換することなく学習する必要があります。お金を節約するために、私は簡単にOctaveまたはskimpを使用し、PerlまたはPythonでスパース行列を操作することを学びます。

MATLABは、配列の操作、特殊な数学関数の実行、すてきなプロットの迅速な作成に最適です。

多くの配列/行列操作を使用できる場合、おそらく大規模なプログラムにのみ使用します。

より正式なパッケージほどIDEについて心配する必要はないので、プログラミングの経験があまりない学生でも簡単に習得できます。

MATLABは人気があり、広く採用されている 洗練されたソフトウェアパッケージ。考えるのは間違いでしょう それはただの数学ソフトウェアです <!> quot; toolboxes <!> quot;。最近 Matplotlib を使用してデータをプロットしました データベースから、それはすべてを必要とせずに仕事をしました MATLABの機能。ただし、適切でない場合があります あらゆる状況でPythonとMATLABを比較します。と同様に それ以外は、決定はあなたが何をする必要があるかに依存します。

MATLABを制御システムの設計のために学部生で使用し、 シミュレーションと大学院の画像処理用。にとって これらのフィールドMATLABは、 強力な制御および画像処理ツールボックス。みんなとして 前述の配列演算は、すべてのMATLABで使用されます 記述する必要があるスクリプトは、MATLABを使用すると非常に簡単です。

MATLABのもう1つの利点は、非常に簡単であり、 プロトタイピングを迅速に行い、組み込みの ツールボックス関数で。たとえば、それは努力を必要としません 画像をインポートしてヒストグラムを計算するか、簡単な操作を行います その上で処理します。 MATLABの欠点の1つは、 その解釈された性質のための速度。ただし、1つの場合 彼が実装することを選択できるよりも本当に速度が必要です C / C ++などでテストされたロジック。

Pythonとさらに比較するために、MATLABと言うことができます なしで作業を行うための完全なパッケージを提供します 外部ライブラリを探し回る必要がある 追加機能の実装。

MATLABについての最後のポイントは、 ここでの答えは、非常に強力なビジュアルを持つことです Simulink と呼ばれるモデリング/シミュレーション環境。それは Simulinkを使用して大規模システムの設計とシミュレーションが容易になります。

最後に、これもすべて、必要な問題に依存します 解決する。問題のあるドメインが次のいずれかを利用できる場合 MATLABのツールボックスを使用すると、MATLABにアクセスできます。 解決するための適切なツールがあることを確認できます。

MATLABは、他の人が述べたように、マトリックス操作に優れており、もともとよく知られている BLAS および LAPACK ライブラリは線形代数に使用されます。 Javaのような他の言語とうまくインターフェースし、よく開発され文書化されたライブラリでエンジニアリング企業や科学企業に好まれています。私がPythonとNumPyについて知っていることから、それらはMATLABの基本的な機能の多くを共有していますが、それらのライブラリには十分な機能がありません。

個人的に、MATLABを使用しているのは、インターンシップで学んだこと、大学院で使用したこと、そして最初の仕事で使用したことです。 Python(または他の言語)に対しては何もありません。それも私が使っているものです。

また、@ GimのJim C と呼ばれるオクターブ

個人的に、私はMatlabをPythonやCのような本格的なプログラミング言語としてではなく、いくつかのスクリプト機能を備えたインタラクティブなマトリックス計算機およびプロットツールと考える傾向があります。その成功の理由は、マトリックスとプロット箱から出して作業すると、実際のプログラミング知識がなくても、いくつかの非常に具体的なことを実行できます。ご指摘のとおり、この言語は、最も単純な文字列処理など、より汎用的なタスクに使用するのは非常にイライラします。その構文は風変わりで、100行以上のプロジェクトに必要な抽象化を念頭に置いて作成されたものではありません。

Matlabを本格的なプログラミング言語として使用しようとする理由は、ほとんどのエンジニア(例外があり、私の学位は生物医学工学であり、プログラミングが好きです)は恐ろしいプログラマーであり、プログラミングが嫌いだからです。彼らは主にマトリックス数学のために大学でMatlabを教えており、Matlabの学習の一環としていくつかの初歩的なプログラミングを学び、Matlabで十分だと仮定しています。私は、Matlab以外の言語を知っている人は誰も思いつきませんが、いくつかの純粋な数値計算アプリケーション以外にはMatlabを使用しています。

大学でこれほど多く使用されている最も可能性の高い理由は、数学の教職員がそれに慣れ、理解し、カリキュラムに組み込む方法を知っていることです。

matplotlib + pylab NumPy @Adam Bellaireが示唆する文化的慣性以外に、Matlabとpythonの間に実際の違いはあまりないと思います。

あなたは非常に良い点を持っていると信じています。それは私が働いている会社で提起されたものです。同社は、ライセンス費用がかかるため、matlabを適用する能力が限られています。ある開発者はPythonが非常に適切な代替品であることを証明しましたが、それらの耳の所有者にとっては無知な耳に落ちました...

  1. 多くの人がPythonを使いたいと思っていましたが、会社の誰もPythonを知りませんでした。
  2. MatLabには、問題を解決するための名前、会社、およびタスクフォースがあります。
  3. 書き直す必要があるレガシーMatLabプロジェクトがいくつかありましたが(多くはありませんでした)。

価値があるなら<!>#163; 10,000(??)価値があるはずです!!

ここにいます。 PythonはMatLabの非常に優れた代替品です。

会社がMatLabsの機能の5%から10%を使用していると言われたことを指摘する必要があります。これが元のポスターとの合意の基礎です

MATLAB は次のような場合に最適なツールです。

  • プロトタイピング
  • エンジニアリングシミュレーションと
  • データの高速視覚化

データセットを使ってアイデアを実際に試し、視覚化し、テストすることが非常に効果的に行えます。製品開発に使用される他のソフトウェア言語の代替としてみなされるべきではありません。上記のタスクにはこれを強くお勧めしますが、高価ではあります - のような無料の代替品 オクターブ そしてPythonが追いつきつつあります。

純粋な慣性のようです。それが使用されている場所では、誰もが忙しすぎてIDLまたはnumpyを十分に詳細に学習して切り替えることができず、正常に動作するプログラムを書き直したくありません。幸いなことに、これは厳密には真実ではありませんが、Matlabが長い間存在する十分な場所で十分に真実です。 Fortranのように(私が働いている場所でアクティブに使用しています!)

業界で役立つ主な理由は、コア機能の上に構築されたプラグインです。過去数年間のほとんどすべてのアクティブなMatlab開発は、これらに焦点を合わせてきました。

残念ながら、学術環境でこれらを使用する機会はあまりありません。

この質問は古いことを知っているので、 見ましたが、コメントする必要があると感じました。として ジョージア工科大学の航空宇宙エンジニア 不安、MATLABは素晴らしい。すぐに手に入れることができます Excelスプレッドシートとインターフェイスして、データを取り込む ロケットの飛行速度と風の影響 それらと同じロケット、そして異なるエンジンがどのように重要か。超えて ロケット、同様の概念が車、トラック、 航空機、宇宙船、さらには陸上競技。引き込むことができます 大量のデータをすべて操作して、 結果は本来あるべきものです。イベントでは オフにすると、エラーが発生した場所に改行を追加してデバッグできます あなたが望むたびに再コンパイルすることなくあなたのプログラム プログラムを実行します。他のプログラムよりも遅いですか? まあ、技術的に。番号をやりたいならきっと NVIDIAグラフィックプロセッサでの使用に最適です。 おそらくより高速になりますが、より多くの努力が必要です デバッグが難しくなります。

一般的なプログラミング言語として、MATLABは脆弱です。そうではありません Python、Java、ActionScript、C / C ++、または その他の汎用言語。それは その名前が意味する工学と数学のニッチ、そしてそれ とても素晴らしい。

MATLABは、一般的に利用可能なライブラリのラッパーでした。 そして多くの場合、それはまだです。大きくなったら データセットには、次のような多くの追加の最適化があります。 一般的な問題の調査と特別なケーシング( 有用な場合はスパース行列、など)および処理 エッジケース。多くの場合、標準で問題を提出できます 一般的な機能へのフォーム、そしてそれは最高を決定します データに基づいて使用する基礎となるアルゴリズム。小規模向け N、すべてのアルゴリズムは高速ですが、MATLABは 最適なアルゴリズムは問題ありません。

これは、MATLABを嫌う人が書いたもので、 統合の問題が原因で置き換えられます。あなたから 質問、MATLAB 5を入手し、それを使用して コース。そのレベルで、あなたは見たいかもしれません Octave 、同じものを使用したオープンソース実装 構文。今ではMATLAB 5レベルまでだと思います(私は それで遊んでください)。これにより、<!> quot; pass あなたの試験<!> quot;。むき出しのMATLAB機能については、 閉じる。ツールボックスのサポートが不足しています(これもまた、 主にフォームの関数呼び出しを再定式化するのに役立ちます 現場のエンジニアに馴染み、適切なものを選択する 使用する基本アルゴリズム)。

MATLABが大学で人気がある理由の1つは、多くのものが大学で人気がある理由と同じです。多くの教授がそれに慣れており、かなり堅牢です。

私は、シリアルで作業するのではなく、GPUを活用するMATLABの初期段階の機能に特に興味がある多くの人々と話をしました。大学院でPythonを使用したことがあるので、その場合にMATLABで動作するようになめられたらいいなと思います。ベクトル空間の計算が簡単になります。

Matlabを使用してからしばらく経ちましたが、メモリから(追加のプラグインがある場合でも)DSPでアルゴリズムを実現できるソースを生成する機能を提供します。

pythonは汎用プログラミング言語であるため、matlabで実行できることをすべてpythonで実行できなかった理由はありません。ただし、matlabは他の多くのツールを提供します-例えば。 dsp機能の非常に幅広い配列、SおよびZドメイン機能の幅広い配列。

これらはすべてPythonで手動でコーディングできます(汎用言語であるため)が、結果が多ければ、Matlabにお金をかけるのが安いオプションでしょうか?

これらの機能もパフォーマンスのために調整されています。例えば。 Numpyのドキュメントは、それらのフーリエ変換が2ポイントのべき乗データセットに対して最適化されることを指定しています。私が理解しているように、Matlabは2の累乗だけでなく、データセットのサイズに合わせて最も効率的なフーリエ変換を使用するように書かれています。

編集:ああ、Matlabでセンセーショナルな looking プロットを簡単に作成できます。これは、データを提示するときに重要です。繰り返しますが、他のツールを使用することは確かに不可能ではありません。

Matlabが<!> quot;行列やプロットを処理するのがかっこいい<!> quot;であることに気付いたとき、あなた自身の質問に答えたと思います。多くの行列演算と視覚化を必要とするアプリケーションは、おそらくMatlabで最も簡単に実行できます。

とはいえ、Matlabの構文は扱いにくいと感じ、言語の年齢を示しています。対照的に、Pythonははるかに優れた汎用プログラミング言語であり、適切なライブラリを使用すると、Matlabの機能の多くを実行できます。ただし、Matlabは、ベクトルと行列の操作に関して、Pythonよりも簡潔な構文を常に使用します。

信号処理や統計手法など、プログラミングの多くがこの種の操作を伴う場合、Matlabの方が適しています。

First Mover Advantage Matlab は1970年代後半から存在しています。 Pythonは最近登場し、Matlabタイプのタスクに適したライブラリが登場しました。人々はMatlabに慣れているので、それを使用します。

Matlabは、数値計算を行うのが得意です。また、マトリックスとマトリックスの操作。ライブラリには多くの便利な組み込みライブラリがあります(バージョンによって異なります)方程式を計算する場合は、Pythonよりも使いやすいと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top