53

私は最近、あるクラスで MATLAB の基礎を学ぶように依頼されました。

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

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

「現実」の世界では、それを何に使うと考えるべきですか?Python よりも優れているのはいつですか? より良いのは、何かを実行するための簡単な方法です。


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

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

4

21 に答える 21

77

アダムは部分的に正しいだけです。ほとんどではないにしても、多くの数学者は決してそれに触れません。使用しているコンピュータツールがあるとすれば、それはMathematicaMapleのようなものになるでしょう。一方、工学部はしばしばそれに依存しており、一部の応用数学者にとっては間違いなく有用なものがあります。また、一部の地域の業界でも頻繁に使用されています。

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

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

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

重要な点は、MATLABを使用する大多数の人々は実際にはプログラマーではなく、なりたくないということです。

これは、一般的なプログラミング言語にとってはお粗末な選択です。それは風変わりで、多くのタスクにとって遅く(効率的なコードを取得するために物事をベクトル化する必要があります)、外の世界と統合するのは簡単ではありません。一方で、得意なことはとても良いです。比較するものはほとんどありません。合理的なサポートを提供し、それに何年の労力を費やしたかを知っている会社があります。これは業界で問題になる可能性があります。

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

于 2008-10-07T20:47:37.370 に答える
38

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

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 で嫌いなもの: その価格

于 2011-12-01T19:44:12.893 に答える
34

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

この夏、Matlab の代わりに Python + numpy を使用する仕事がありました。気分転換を楽しみました。これは「本物の」言語 (およびそれに付随するすべての言語) であり、ブロードキャスト配列などの優れた数値機能を備えています。ipython 環境もとても気に入っています。

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

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

それほど大きな既存のコードベースがなければ、Python + numpy に切り替えることを真剣に検討します。

于 2008-10-10T23:47:23.830 に答える
15

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

MATLAB でクランチ、プロット、または探索を行いたい場合や、Python が提供するすべての機能を利用したい場合は、すぐに感覚をつかむことができます。多くのエンジニアは、Python や Perl で前処理と後処理を行っています。時折、ハード ビットについて MATLAB を呼び出すことさえあります。

それらはまったく異なるツールであるため、一方を他方に置き換えようとするのではなく、まずそれらの基本的な強みを学ぶ必要があります。お金を節約するために、Octave を使用するか、使いやすさを犠牲にして、Perl または Python でスパース行列を操作する方法を学びます。

于 2008-10-08T05:53:11.513 に答える
13

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

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

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

于 2008-10-07T19:13:08.437 に答える
12

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

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

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

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

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

最後に、繰り返しになりますが、すべては解決する必要がある問題によって異なります。問題領域で MATLAB のツールボックスの 1 つを利用でき、MATLAB にアクセスできる場合は、それを解決するための適切なツールを確実に入手できます。

于 2008-10-08T04:41:56.260 に答える
10

他の人が言及したように、MATLAB は行列操作に優れており、もともと線形代数に使用される有名なBLASおよびLAPACKライブラリの拡張として構築されました。Java などの他の言語とのインターフェイスが良好で、よく開発され文書化されたライブラリにより、エンジニアリング企業や科学企業に好まれています。私が Python と NumPy について知っている限りでは、それらは MATLAB の基本的な機能の多くを共有していますが、それらのライブラリの機能の幅と深さを完全には備えていません。

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

また、scilab に加えて、gnu の@ Jim Cが言及したOctaveという別の無料バージョンもあります。

于 2008-10-07T19:34:09.080 に答える
7

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

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

于 2008-10-08T03:53:22.520 に答える
6

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

于 2008-10-07T19:13:16.093 に答える
6

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

于 2008-10-07T19:17:03.247 に答える
6

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

  1. 社内の誰も Python を知っていませんでしたが、私たちの多くは Python を使いたいと思っていました。
  2. MatLab には、問題を解決するための名前、会社、およびその背後にあるタスク フォースがあります。
  3. 書き直さなければならない従来の MatLab プロジェクトがいくつかありました (ただし、多くはありません)。

10,000ポンド(??)の価値があるなら、それだけの価値があるはずです!!

私はここであなたと一緒にいます。Python は、MatLab の優れた代替品です。

私は、会社がおそらく MatLabs の機能の 5% から 10% を使用していると言われたことを指摘しておく必要があります。

于 2008-10-07T19:40:56.070 に答える
6

MATLAB は、

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

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

于 2008-12-16T07:30:31.400 に答える
5

純粋な惰性のようです。それが使用されている場所では、誰もが忙しすぎて IDL や numpy を切り替えるのに十分な詳細を学ぶことができず、適切に機能するプログラムを書き直したくありません。幸いなことに、これは厳密には真実ではありませんが、Matlab が長期間使用される場所では十分に真実です。Fortranのように(私が働いているところで積極的に使用されています!)

于 2008-10-08T02:14:20.660 に答える
4

MATLAB は、一般的に利用可能なライブラリのラッパーでした。そして多くの場合、それは今でも変わりません。大規模なデータセットに到達すると、多くの追加の最適化が行われます。これには、一般的な問題の調査と特別なケーシング (たとえば、有用な疎行列への縮小)、およびエッジ ケースの処理が含まれます。多くの場合、問題を標準形式で一般的な関数に送信すると、データに基づいて使用する最適な基本アルゴリズムが決定されます。N が小さい場合、すべてのアルゴリズムが高速ですが、MATLAB では最適なアルゴリズムの決定は問題になりません。

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

于 2008-10-08T05:52:33.073 に答える
4

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

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

于 2008-10-07T19:21:18.810 に答える
4

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

私は、シリアル作業の代わりに GPU を活用する MATLAB の初期の機能に特に関心を持っている多くの人々と話をしてきました。大学院で Python を使ったことがあるので、その場合に MATLAB を操作するためのコツがあればいいのにと思います。ベクトル空間の計算が簡単になることは間違いありません。

于 2008-10-07T19:40:25.433 に答える
4

この質問は古いので、もう見られないかもしれませんが、コメントする必要があると感じました. ジョージア工科大学の航空宇宙エンジニアとして、MATLAB は素晴らしいと、何の躊躇もなく言えます。Excel スプレッドシートとすばやく連携させて、ロケットの飛行速度と高さ、風が同じロケットに与える影響、さまざまなエンジンの重要性に関するデータを取り込むことができます。ロケット工学を超えて、同様の概念が自動車、トラック、航空機、宇宙船、さらには陸上競技にまで及びます。大量のデータを取り込み、そのすべてを操作して、結果が想定どおりであることを確認できます。何かがオフになっている場合は、プログラムを実行するたびに再コンパイルする必要なく、エラーが発生した場所に改行を追加してプログラムをデバッグできます。他のプログラムより遅いですか?まあ、技術的に。私'

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

于 2009-07-11T06:02:31.317 に答える
3

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

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

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

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

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

于 2008-10-07T22:46:25.650 に答える
3

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

とはいえ、Matlab の構文はぎこちなく、言語の古さを示しています。対照的に、Python ははるかに優れた汎用プログラミング言語であり、適切なライブラリを使用すると、Matlab が行うことの多くを行うことができます。ただし、Matlab は常に Python よりも簡潔な構文でベクトルと行列を操作します。

信号処理や統計手法など、プログラミングの多くにこの種の操作が含まれる場合は、Matlab を選択することをお勧めします。

于 2008-10-08T04:03:27.897 に答える
2

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

于 2009-12-11T21:00:44.033 に答える
2

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

于 2008-10-07T19:28:58.543 に答える