web-dev-qa-db-ja.com

MATLABは何に適していますか?なぜ大学でそれほど使用されているのですか? Pythonよりも優れているのはいつですか?

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

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

関数を書いたりファイルを解析したりするのは苦痛です。私はまだ最初の段階にいますが、何が欠けていますか?

「現実の」世界では、何のためにそれを使うべきだと思いますか?いつPythonよりも良くなるはずですか?良いことを意味する:何かを実行する簡単な方法。


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

更新2:ご回答ありがとうございます。私の質問は、MATLABを購入するかどうかです。大学は、ライセンスを壊すことなく、MATLABの古いバージョン(MATLAB 5の推測)を無料で提供することができます。私はその機能に興味があり、それがより深い研究に値する場合(試験に合格するために他のMATLABbasic以上のものは必要ありません: P)実際の世界の特定の種類のタスクでは、Pythonよりも優れています。

53
Andrea Ambu

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

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

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

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

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

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

Python vs.MATLABの比較を厳密に見ると、それらは主に異なるジョブのための異なるツールです。それらが少し重複する領域では、より良いルートが何であるかを言うのは難しいです。しかし、ほとんどの場合、Pythonは、MATLABのコアの強さではそれほど優れていません。逆もまた同様です。

77
simon

ほとんどの答えは意味を成していません。

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

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

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

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を指定してもエラーは発生せず、間違った出力を出力します...

3)IDE

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

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

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

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

6)ドキュメント

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

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

38
Oli

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

去年の夏、私はMatlabの代わりにPython + numpyを使った仕事をしました。ペースの変化を楽しんでいます。配列のブロードキャストなどの優れた数値機能と、ipython環境もとても気に入っています。

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

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

既存のコードベースがそれほど大きくなかったら、Python + numpy。

34
Mr Fooz

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

MATLABでクランチ、プロット、または探索したいとき、およびPythonが提供するすべてのものが必要なとき。多くのエンジニアが= PythonまたはPerl。ときどき、ハードビットのためにMATLABを呼び出すことさえあります。

これらはまったく異なるツールであるため、一方を他方に置き換えようとせずに、まずそれらの基本的な長所を学ぶ必要があります。お金を節約するために、私は簡単にOctaveを使うかスキムを使い、PerlまたはPythonでスパース行列を操作することを学びました。

15
dlamblin

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

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

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

13
Lance Roberts

MATLABは、洗練されたソフトウェアパッケージの中で広く採用されている人気のある作品です。幅広い「ツールボックス」を備えているため、単なる数学ソフトウェアであると考えるのは間違いです。最近 Matplotlib を使用してデータベースからデータをプロットし、MATLABのすべての機能を必要とせずにジョブを実行しました。ただし、すべての状況でPythonとMATLABを比較することは適切ではありません。他のすべての場合と同様に、決定はあなたが何をする必要があるかに依存します。

私は学部でMATLABを使用して、制御システムの設計とシミュレーションを行い、大学院での画像処理にも使用しました。これらのフィールドでは、強力な制御および画像処理ツールボックスにより、MATLABが最も有効です。誰もが言及したように、MATLABスクリプトを使用すると、作成する必要のあるすべてのMATLABスクリプトで使用される配列操作が非常に簡単になります。

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

Pythonとさらに比較するために、MATLABは、外部ライブラリを探したり、追加の関数を実装したりすることなく作業を行うための完全なパッケージを提供していると言えます。

ここでの回答には言及されていないMATLABについての最後のポイントは、 Simulink と呼ばれる非常に強力な視覚的モデリング/シミュレーション環境があることです。 Simulinkを使用すると、大規模システムの設計とシミュレーションが簡単になります。

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

12
Turker

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

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

また、 Octave と呼ばれる@ Jim C gnuのscilabに加えて、別の無料バージョンがあります。

10
Scottie T

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

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

7
dsimcha

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

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

£10,000(??)の価値がある場合、それは価値があります!

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

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

6
Derek Smyth

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

6
Adam Bellaire

matplotlib + pylabNumPy の間Matlabとpython @が示唆する文化的慣性以外に実際の違いはないと思うアダム・ベレール。

6
Aaron Maenpaa

MATLABは、

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

データセットのアイデアを非常に効果的に操作、視覚化、テストできます。製品開発に使用される他のソフトウェア言語の代替と見なされるべきではありません。高価ですが、 Octave やPythonなどの無料の代替手段が追いついています。

6
Fredriku73

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

5
DarenW

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

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

4
Robert Elwell

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

残念ながら、これらをアカデミック環境で使用する機会はあまりありません。

4
John Mulder

この質問は古く、もはや見られないかもしれないことは知っていますが、コメントする必要があると感じました。ジョージア工科大学の航空宇宙技術者として、私は、MATLABが素晴らしいことを何の問題もなく言うことができます。 Excelスプレッドシートとすばやく接続して、ロケットの飛行速度と速度、同じロケットへの風の影響、異なるエンジンの重要性に関するデータを取り込むことができます。ロケット以外にも、車、トラック、航空機、宇宙船、さらには陸上競技でも同様の概念が作用します。大量のデータを取り込み、そのすべてを操作して、結果が本来のとおりであることを確認できます。イベントがオフになった場合、プログラムを実行するたびに再コンパイルすることなく、エラーが発生した場所に改行を追加してプログラムをデバッグできます。他のプログラムよりも遅いですか?まあ、技術的に。 NVIDIAグラフィックスプロセッサ上で最適な数の計算を実行したい場合は、おそらく高速になりますが、デバッグが難しくなり、より多くの労力が必要になります。

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

4
Kyle

MATLABは、一般的に利用可能なライブラリのラッパーでした。そして多くの場合、それはまだです。より大きなデータセットに到達すると、一般的な問題の調査や特別なケーシング(たとえば、有用な場合はスパース行列の削減)、Edgeケースの処理など、多くの追加の最適化が行われます。多くの場合、標準形式の問題を一般的な機能に送信すると、データに基づいて、使用する最適なアルゴリズムが決定されます。 Nが小さい場合、すべてのアルゴリズムは高速ですが、MATLABは最適なアルゴリズムの決定を問題にしません。

これは、MATLABを嫌う人によって書かれ、統合の問題のためにそれを置き換えようとしました。あなたの質問から、MATLAB 5を入手してコースで使用することについて言及しています。そのレベルでは、同じ構文のオープンソース実装である Octave をご覧ください。今ではMATLAB 5レベルまでだと思います(私はそれで遊んでいるだけです)。これにより、「試験に合格する」ことができます。むき出しのMATLAB機能については、近いようです。ツールボックスのサポートが不足しています(これも、ほとんどの場合、フィールドのエンジニアが使い慣れているフォームへの関数呼び出しを再定式化し、使用する適切な基礎となるアルゴリズムを選択します)。

4
ramanman

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

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

これらはすべて、python(汎用言語だから)で手作業でコーディングできますが、Matlabにお金を使った結果が安価なオプションであるという結果だけが必要な場合はどうでしょうか。

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

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

3

Matlabは「マトリックスを操作してプロットするのがクール」であることに気付いたときに、あなた自身の質問に答えたと思います。多くの行列計算と視覚化を必要とするアプリケーションは、おそらくMatlabで最も簡単に実行できます。

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

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

3
Mark Reid

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

2
Ben Fossen

ファーストムーバーアドバンテージMatlab は1970年代後半から存在しています。 Pythonが最近登場し、Matlabタイプのタスクに適したライブラリが登場しました。人々はMatlabに慣れているので、Matlabを使用しています。

2
Andru Luvisi