NumPyおよび/またはSciPyの一部はC/C ++でプログラムされていますか?
また、PythonからCを呼び出すオーバーヘッドは、JavaやC#からCを呼び出すオーバーヘッドとどのように比較されますか?
科学アプリでは、PythonがJavaやC#よりも優れたオプションであるかどうか疑問に思っています。
シュートアウトを見ると、Pythonは大幅に負けています。しかし、これは、これらのベンチマークでサードパーティのライブラリを使用していないためだと思います。
NumPyおよび/またはSciPyの一部はC/C ++でプログラムされていますか?
また、PythonからCを呼び出すオーバーヘッドは、JavaやC#からCを呼び出すオーバーヘッドとどのように比較されますか?
科学アプリでは、PythonがJavaやC#よりも優れたオプションであるかどうか疑問に思っています。
シュートアウトを見ると、Pythonは大幅に負けています。しかし、これは、これらのベンチマークでサードパーティのライブラリを使用していないためだと思います。
私はここ数年、データ処理と分析にPythonを使用しているので、目的に合っていると思います。
一日の終わりに何を達成しようとしていますか?読みやすいコードをすばやく開発する方法が必要な場合は、Pythonが優れたオプションであり、解決しようとしているものを最初に突き刺すのに十分な速度です。
問題の小さなサブセットについてそれぞれにバッシュをかけ、開発時間と実行時間の観点から結果をベンチマークしてみませんか?次に、いくつかの関連データに基づいて客観的な決定を下すことができます...または少なくともそれは私がすることです:-)
ここにはより良い比較があります(ベンチマークではありませんが、Pythonを高速化する方法を示しています)。NumPyは主にCで記述されています。Pythonの主な利点は、C(ctypes、swig、f2py)/ C ++(boost.python、weave.inline、weave.blitz)を使用してコードを非常に簡単に拡張する方法がいくつかあることです。 / Fortran(f2py)-またはPythonに型注釈を追加するだけで、C(cython)に処理できるようになります。C#やJavaにとって比較的簡単なことは多くないと思います-少なくとも、さまざまなタイプの数値配列の受け渡しを処理しているようには見えません(ただし、Pythonのパフォーマンスの低下がないため、支持者は主張するでしょうが、必要性は少なくなりますに)。
その多くはCまたはFortranで書かれています。Cでホットループを書き直すことができます(またはPythonを高速化するための膨大な方法の1つを使用して、ブースト/ウィーブが私のお気に入りです)が、それは本当に重要ですか?
科学アプリは1回実行されます。残りはただのデバッグと開発であり、それらはPythonではるかに高速になる可能性があります。
NumPyのほとんどはCですが、Cコードの大部分は「ボイラープレート」であり、Python/Cインターフェイスのすべての汚い詳細を処理します。NumPyのC対Pythonの比率は約50/50ATMだと思います。
私はvmベースの低レベルの詳細にあまり精通していませんが、jvmと.clrに課せられた制限のために、インターフェイスのコストが高くなると思います。numpyが同様の環境よりも高速であることが多い理由の1つは、メモリ表現と、関数間で配列が共有/受け渡される方法です。ほとんどの環境(MatlabとRもそうだと思います)はコピーオンライトを使用して関数間で配列を渡しますが、NumPyは参照を使用します。ただし、たとえばJVMでこれを行うのは困難です(ポインタの使用方法の制限などのため)。それは実行可能です(Jython用のNumPyの初期の移植版が存在します)が、それらがこの問題をどのように解決するかはわかりません。たぶんC++/ Cliでこれが簡単になるかもしれませんが、私はその環境での経験がまったくありません。
それは常に言語を処理するあなた自身の能力に依存しているので、言語は高速コードを生成することができます。私の経験では、numpyは優れた.NET実装よりも数倍遅くなります。そして、私はJAVAが同様に速いことを期待しています。それらの最適化JITコンパイラは、長年にわたって大幅に改善され、非常に効率的な命令を生成します。
一方、numpyには、スクリプト言語に合わせた構文が付属しています。しかし、アプリケーション開発に関して言えば、これらの利点はしばしば障害になり、型安全性とエンタープライズIDEを切望します。また、構文のギャップはすでにC#で埋められています。Javaと.NET用の科学ライブラリが増えています。個人的にはC#を使用する傾向があります。これは、多次元配列の構文が優れていて、どういうわけか「モダン」な感じがするためです。しかしもちろん、これは私の個人的な経験にすぎません。