柔らかい質問:Pythonはどこに当てはまりますか?


9

それで、私はPythonを勉強する必要があるかどうかについて議論してきました。私の教授と話すことから、学界に関する限り、Matlabは応用数学/計算科学で使用される共通言語のようです。業界にいる間、私の教授(特に業界で働いたことがある人)は、c ++を学ぶことが最も安全な道だと言っています。

アカデミアと業界の両方で、Pythonに悩む必要があるのか​​、それとも今のところ私が知っていること(MATLABとC ++)に本当に慣れるのかについて、皆さんから聞いてみたいと思います。

更新:ジェフは良い点をもたらします、私はおそらくいくつかの詳細を書き留めるべきです:

私は現在、昨年の学部生で、計算を専門とする数学を勉強しています。大学院に進学して研究を続けたい(自分が教育を楽しんでいるのを見たことがない)か、研究室で働きたいです。どちらも理想的です。研究の分野については、おそらく数値分析または確率の線に沿ったものでしょう。プランAがうまくいかない場合でも、業界への準備が学校からあまり時間をかけられない限り、私は業界で働くことができるでしょう。だから、私はバックアップとして、業界で一般的な言語を学ぶべきだと考えました。しかし、これが私が対立している理由でもあります。すべての言語を勉強したり、あらゆる可能性に備えることはできません。時間がかかりすぎるからです。


1
あなたの質問は良いものですが、多分少々自由解で曖昧です。あなたはどんな学問を勉強していて、あなたは何をしたいと思いますか?
Geoff Oxberry 2013年

1
Pythonで実行できる、MATLABまたは純粋なC ++ではうまく機能しない例:epubs.siam.org/doi/abs/10.1137/110856976。(恥知らずな自己宣伝アラート)
デビッドケッチェソン2013

回答:


15

これらのタイプの質問の難しさは、答えがコミュニティに大きく依存していることです。

あなたの質問のいくつかを無秩序な順序で答えるには:

MATLABは、学界と産業界の両方で多く使用されています。それが産業界でかなり使われている理由の一つは、それが学界で教えられているからです。私は、MATLABがリンカーン研究所とデュポンの研究開発部門で使用されていることを知っています。

sympyやSAGEなどのシンボリック計算が得意なPythonで書かれたソフトウェアパッケージがあります。特定の興味、機能要件、および個人的な好みに応じて、Mathematica(またはMaple、またはその他のコンピュータ代数システム)はこれらのパッケージよりも優れている場合があります。

MATLABには、一部のシンボリック計算に使用できるSymbolic Math Toolboxがありますが、私の経験では、そのシンボリック操作機能はMathematicaおよびPythonよりも弱いです。一部のシンボリック操作は理論的にはC ++で実行できますが、扱いにくいです。また、MATLABは優れた汎用言語ではありません。線形代数と数値数学はうまく機能しますが、優れた入出力機能はありません。C ++やPythonと比較して、(並列MATLAB、MATLAB Star-P、Parallel Computing Toolboxなどのバリアントがあっても)優れた並列機能はありません。そのグラフィック機能でさえ、いくらかの作業を使用できます。ライセンスを持つ機関と提携しているのでない限り、MATLABも高価です。各ツールボックスの購入には費用がかかり、通常は数百ドルから数千ドルの費用がかかります。

Mathematicaは記号計算に加えて数値計算も行います。私が人々が数値計算にPythonやMATLABを使用するのを見たほど、​​数値計算にそれを使用するのを見たことはありません。それも並列機能を備えていますが、大規模なスーパーコンピューターには拡張できません。

Pythonは、学習が容易で使いやすいと見なされている優れた汎用言語です。大規模なスーパーコンピューター(たとえば、PyClaw、petsc4py、mpi4pyなどを参照)で使用され、適切にスケーリングされます。また、高い評価を受けている数値パッケージ(NumPyやSciPyなど)もあります。大規模で活発なコミュニティ。優れた入出力処理機能。優れたグラフィックライブラリ、およびライブラリの大規模なリポジトリ(PyPIをチェックしてください)。上記のプロプライエタリパッケージと比較すると無料です。MATLABまたはMathematicaのほとんどの機能は、無料で入手できるPythonパッケージに含まれています。Pythonの主な欠点は、C ++などのコンパイル済み言語よりも遅くなる傾向があることですが、この欠点は、Cython、Numba、およびPyPyの継続的な開発によって減少しています。より遅いPythonコードをC(またはC ++、またはFortran)コードと適切に記述されたPythonラッパーで置き換えることによっても緩和できます。解釈されているため、多くの人々はPythonの方がコンパイル言語よりも生産性が高いと報告しています。それは非常に人気があり、時間があれば多分学ぶ価値があります。

C ++は複雑な言語であり、計算科学でのその使用は物議を醸しています。その大規模な機能セットにより、保守が困難でコンパイルに永遠にかかるソフトウェアを簡単に作成できます。ただし、テンプレートやオペレーターのオーバーロードなどの機能は、deal.II、Blaze、Elementalなどのプロジェクトで使用されているため、慎重に使用することで非常に効果的です。C ++の高度な機能については、学習曲線が急になっています。また、完全な言語を習得したと感じるまでに何年もかかるという事例報告も耳にしました。それにもかかわらず、使いやすさの懸念と複雑な機能セットにもかかわらず、それは人気のある言語でもあります。自分をより雇用しやすくするために、それはおそらく学ぶ価値があります。計算科学の主な競争相手はFortranとCであり、これらも学ぶ価値があります。

あなたが学ぶことを決定するものは何でも、あなたが実際に必要とするものに基づいています。もちろん、PythonとC ++の両方を学ぶのは良いことですが、時間とリソースの制約を考えると、おそらく実際に使用する必要があるものだけを学習することになるでしょう。それは、作業するコミュニティによって異なります。


アカデミアに関する限り、C ++ではなくPythonの学習に時間を費やす方が良いと思いますか?
AlanH 2013年

1
繰り返しますが、それはすべて異なります。私はまだ学問的な側面が強く、常にPythonを使用しています。また、その言語で書かれた作業にはC ++を使用する必要があります。私の個人的な見解では、Pythonを最初に学習する方が、C ++を最初に学習した場合よりも早く効果が上がると思いますが、確率論/確率論的プロセス/組み合わせ論の人々が何を使っているのかわからないため、マイレージは異なる場合があります。
Geoff Oxberry 2013年

ジェフと同じように、Pythonを最初に学習することをお勧めします。C ++は優れた言語ですが、学習曲線は大幅に高く、中途半端にそれを学習することは、まったく学習しないことよりも間違いなく議論の余地があります。
LKlevin 2015

「C ++の高度な機能については、学習曲線が急になっています。完全な言語を習得したと感じるまでに何年もかかっているという事例報告も聞いています。」はい、これ以上同意できませんでした。彼の才能を発揮するプログラマは、生涯のうちにc / c ++を学ぶべきだと思いますが、本当に専門家のように感じるには、1万時間かかることでしょう。+1
James

11

MishaとGeoff Oxberryが指摘したように、Mathematicaは実際には別の焦点を持っています(ドライバーで釘を打ち込むことができるからといって、そうする必要があるわけではありません)。だから私はあなたの質問を「Matlabを知っているなら、なぜPythonを学ぶべきなのか」と考えます。[編集:そして、明らかに、あなたはそうしました。]

すべての意図と目的において、Matlabは科学計算の英語です-このアナロジーが伴うすべてのプラスとマイナスの意味合いを持ちます。特定の良い点の1つは、Matlabコードが他の言語のコードよりも多くの人にとって有用(つまり、実行可能で理解可能)である可能性が高いことです。(これが、すべてのアルゴリズムにMatlabコードを提供する主な理由です。)また、Matlabデスクトップは、プロトタイピング中に特に便利です。特に、エディターから直接コード(セル)のビットを実行する機能や、組み込みのプロファイラーで。

とは言え、もしあなたが楽しさと利益のために別の高級言語を学びたいなら、あなたはPythonよりも悪いことをすることができます。ジェフがリストしたものに加えて、いくつかの理由:

  • Pythonでは、外部プログラムやライブラリとのインターフェースがはるかに簡単です。これ以上mexファイルはありません!

  • デスクトップから離れている場合、Matlabライセンスにアクセスするよりも、Python + NumPy / SciPyを起動して実行する方がはるかに簡単です。

  • MatlabがNumPyより高速である主な理由は、線形代数(MKL、ACML)向けに最適化されたベンダーライブラリがバンドルされていることです。(少し面倒な場合は)独自のNumPyを構築し、それを同じライブラリーにリンクして、Matlabとほぼ同じ性能(およびマルチスレッド化)で線形代数を得ることができます。さらに、他のすべての場合はPythonのパフォーマンスが向上します。(もちろん、アカデミックでの使用にもライセンスが必要なので、フリーソフトウェアのボーナスは無効になりますが、オフィスでの既製と同様に、雇用主が後援する高速インストールで同じコードを機能させることは、興味深いオプションです。自宅のマシンまたはノートブックにインストールします。)

  • Matlabのツールボックスはそのセールスポイントの1つですが、Pythonがはるかに進んでいる分野がいくつかあります。特に、SymPyFEniCSは、SymbolicツールボックスとPDEツールボックスを大幅に上回りました。

  • 楽しい部分を忘れないでください(セマンティックホワイトスペースと名前のバインディングにかかわらず):いくつかの同僚がPythonのバグに悩まされているのを見てきました。Matlabにはない、Pythonでアルゴリズムを書くことに本当に不思議なことに満足しています(それは単に外国語を学ぶことの喜びかもしれませんが):)

(NumPyから始める場合は、このページが役立つ場合があります。)


5

Pythonは、c ++とMatlabの両方の代替になる可能性があります。学界にも産業界にも広く普及しています。業界では、低レベル言語、主にc / c ++の接着剤として使用されることもあります。Mathematicaは完全に別の話です。その主な利点は、他のすべての言及(c / c ++; Matlab; Python)が適切でない場合です:シンボリック計算において。

したがって、4つすべてが完全に異なります。C++は古く、安定した比較的低レベルのプログラミング言語です。Pythonは新しく進化している高水準コンピュータ言語です。Matlabは、ベクトル代数に強いアクセントを持つ数値計算環境です(多かれ少なかれすべてを実行できます)。Mathematicaはシンボリック計算に強いアクセントを持つコンピュータ代数システムです(Matlabと同じ発言)。したがって、彼らは競争相手ではありません。


確かに; 人々が科学計算にMathematicaを使用しているのを見ると、私はしばしば困惑します(時には驚かされます...)
Christian Clason 2013年

@ChristianClasonとMisha:Mathematicaが主にコンピュータ代数システムであるというのは誤解です。人々が実際にそれどのように使用するかを見る、そのほとんどはシンボリック代数ではなく、いくつかの数値フィールドでは、MATLABやRなどのツールと競合します(個人的に、ほとんどの数値データ処理タスクでは、これらの2つよりもMmaを選択します、しかしもちろんそれは個人的な好みです。)数値積分や視覚化などの一部の領域では、MATLABよりも優れているようです。PDEのような他の方法では、それはかなり遅れています。
Szabolcs

数値計算だけに関心がある人にとって、Pythonは、MATLABの代替であり、線形代数、フーリエ変換、特殊関数などを含む標準化された計算を処理するためのライブラリルーチンを利用する能力が似ている比較的高水準の言語です。 。はい、Pythonはより広範囲に適用できますが、MATLABで実行できるすべてのことをカバーします。
ブライアンボーチャーズ2015

4

あなたの質問はpythonの使用に関するものだと知っていますが、「数値分析または確率」に興味があるとおっしゃっていました。Rを検討したかどうかはわかりませんが、この種の作業のために特別に設計されています。Rは確率と統計のための非常に強力な言語であり、数学者や科学者の非常に大規模でアクティブなユーザーベースを持っています。

Rは、オープンソースであり、統計に重点を置いており、非常に印象的なプロットを作成するという点でMatlabとは異なります(ggplot2を参照)。Rでは、Matlabで実行できることのほとんどすべてを実行できますが、私のお気に入りの側面はユーザーの貢献です。寄稿されたライブラリのほとんどは科学者によって書かれ、統計ジャーナルに公開されています。彼らはまた非常によく書かれたガイド(参照とビネットと呼ばれる)を持っています。私のお気に入りのライブラリーは、CULAライブラリーに基づいて構築されたCUDAサポートを提供します(学術用に無料)。確率論にも驚異的な量の方法が存在します(ここを参照)。

とにかく、Rは間違いなくあなたの仕事の行のために特別に設計されているので、チェックして、ツールキットに追加することを検討してください。

がんばって!


2

他の人はすでに私がここで試みるよりも詳細かつ詳細にコメントしています。ただし、もう一度強調したいのは、コミュニティによって異なります。たとえば、電気工学プロジェクトに取り組んでいる場合、MATLABを使用する可能性があります。単純なモデルの問題で収束率の推定値を検証したい数値アナリストの場合も同じことが当てはまります。

一方、適切な科学計算(例:翼の周りの流れのシミュレーション、プラズマでの核融合のシミュレーション、地球のマントルでの対流のシミュレーション)、またはそのようなアプリケーションを念頭に置いた数値手法の開発に興味がある場合は、 francaはC ++です。今日、すべての大規模な科学計算パッケージは、良くも悪くもC ++(またはC)で記述されており、これが今後も長期にわたって存続する方法です。ほんのいくつかの例を挙げると、PETScと非常に大きく多様なTrilinosパッケージは、それぞれCとC ++で書かれています。私が考えることができる大規模なオープンソース有限要素ライブラリ(libMesh、deal.II、oofem、freefem)の中で、すべてのライブラリはC ++で書かれています。視覚化プログラムの中で、最大の2つ(VisitとParaview)はC ++で書かれています。リストを拡張できます。

重要なのは、小規模なシミュレーションに満足している場合、人々は1つの言語を使用しますが、深刻な、おそらく並列計算になると、すべてが別の言語を使用します。それは確かにコミュニティのものですが、相互運用可能でもあります-PETScとTrilinosがCおよびC ++で書かれている場合、私(deal.IIの作成者)は他の言語を簡単に選択できません。 PETScとTrilinosを使用する必要があります。


1
公平を期すために、Fortranから多くの PETScユーザーが来ており、Pythonからかなりの数のユーザーがいます。Cはほとんどすべての言語から簡単に呼び出すことができますが、混合言語プログラミングには独自の課題があり、あまりお勧めしません。スタックのどこにコードが存在するかという問題も見過ごされがちです。たとえば、エンドユーザーアプリケーション、システムレベルのライブラリとは異なるソフトウェア設計を選択する必要があります。
Jed Brown、

それは公正です。しかし、大規模な計算で使用されるソフトウェアの最近のインスタンスが最近CおよびC ++で圧倒的に書かれていることは事実です(それにもかかわらず、Fortranで書かれた古いホールドアウト)。
Wolfgang Bangerth 2013

1

私の2セントを足すために、私は最近の学問的な経験(新しいPhD卒業生:))と業界での経験(測量機器メーカー)の両方を経験しました。

私たちは、弱い組み込みプロセッサで多くの数値計算を行います(携帯電話のプロセッサと考えてください)。ARM用のMATLABがないことを除いて、C ++はこの世界の王様です-多くの組み込みコンパイラスイートにはFORTANが含まれていません!

限られた数のMATLABライセンスがありますが、製品に2ワットの電力を消費させる必要があるため、開発作業はC ++を優先して行われます(実験は別です)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.