主に数学ベースのプログラムに C++ と Python のどちらを使用するかを検討しています。
どちらにも優れた数学ライブラリがありますが、一般的に複雑な数学ではどちらの言語の方が高速ですか?
ハイブリッド アプローチを検討することもできます。Python は一般に、特にユーザー インターフェイス、入力/出力などの開発がより簡単で高速です。
C++ は、一部の数学演算では確かに高速である必要があります (ただし、numpy が非常に効率的なベクトル操作への python インターフェイスを提供するよりも、ベクトル演算または線形代数に関して問題を定式化できる場合)。
Python は、Cython、Swig、Boost Python などで簡単に拡張できるため、1 つの戦略は、プログラムの簿記型の部分をすべて Python で記述し、計算コードを C++ で実行することです。
C++の方が速いと言っても過言ではないでしょう。コンパイルされた言語であるという理由だけで、Pythonのようにインタプリタではなく、コードのみが実行されていることを意味します。
ただし、Pythonを使用して非常に高速なコードを記述したり、C++を使用して非常に低速なコードを記述したりすることは可能です。したがって、どの言語でも賢くプログラムする必要があります。
もう1つの利点は、C ++がタイプセーフであり、実際に必要なものをプログラムするのに役立つことです。
状況によっては、C ++がタイプセーフであるという欠点があり、設計のオーバーヘッドが発生します。たとえば、関数とクラスのインターフェイスについて(おそらく長くて難しい)考える必要があります。
私は多くの理由でPythonが好きです。だから、これをPythonに対する罪状認否を理解しないでください。
It all depends if faster is "faster to execute" or "faster to develop". Overall, python will be quicker for development, c++ faster for execution. For working with integers (arithmetic), it has full precision integers, it has a lot of external tools (numpy, pylab...) My advice would be go python first, if you have performance issue, then switch to cpp (or use external libraries written in cpp from python, in an hybrid approach)
There is no good answer, it all depends on what you want to do in terms of research / calculus
集中的な数値計算では C++ の方が高速になることは言うまでもありません。ただし、既存のライブラリ (C/C++/Haskell などで記述) が非常に多く、Python ラッパーを使用しています。Python の利便性を利用して、既存のライブラリに負荷を持たせる方が便利です。
1 つの包括的なシステムはhttp://www.sagemath.orgで、かなり興味深いリンクはhttp://sagemath.org/links-components.htmlで使用されるコンポーネントです。
numpy
私の経験から/scipy
を備えたシステムpandas
は、通常、ほとんどの場合に十分です。
あなたがより好きなものを使用してください(そしてあなたはPythonをもっと好きになるはずです:))。
いずれの場合も、数学を多用する計算は、言語に依存しない既存のライブラリで実行する必要があります(通常、実際の数学の実行にはBLAS / LAPACKが使用されます)。Pythonを使用する場合は 、計算にnumpyを使用してください。
編集:あなたのコメントから、あなたはあなたのプログラムの速度に非常に関心を持っているようです。高レベルのpythonicコードによってどれだけの時間が浪費されているかを確実に知る唯一の方法は、プログラムのプロファイルを作成することです(たとえば、run -pでipythonを使用します)。
ほとんどの場合、高レベルのものは合計実行時間の約10%を占めることがわかります。したがって、PythonからC ++に切り替えると、その10%が何らかの要因で改善されるだけで、実行時間はおそらく5%増加します。 。
Google とスタンフォードが C++ を知らないとは思えません。
「全体的に速い」というのは言葉だけではありません。アルゴリズムは、それがどの言語で書かれているかに関係なく、ソリューションを成功または失敗させる可能性があります。C++ で記述された選択は不適切であり、Java または Python のどちらかがより適切なアルゴリズムを選択した場合に打ち負かされます。
たとえば、メモリ内のシングル CPU 線形代数ライブラリは、適切に実行された並列化されたバージョンによってドアが吹き飛ばされます。
陰的アルゴリズムは、時間ステップの安定性の制限にもかかわらず、実際には陽的アルゴリズムよりも遅くなる可能性があります。後者は行列を反転する必要がないためです。これは、双曲線偏微分方程式の場合によく当てはまります。
「一般的に高速」は気にしないでください。解決しようとしている問題と、それを解決するために使用されるアルゴリズムを深く調べる必要があります。盲目的に言語を選択するよりも、その方がうまくいくでしょう。
私なら、Java プラットフォームで実行される Python を使用します。このアプローチはDataMelt プログラムに実装されています。JVM がコードを最適化するため、Python から Java ライブラリを呼び出すアルゴリズムはより高速になる可能性があります。