質問

NumPyやSciPyの一部はC / C ++でプログラミングされていますか?

そして、PythonからCを呼び出すオーバーヘッドは、JavaやC#からCを呼び出すオーバーヘッドと比較してどうですか?

Pythonが科学アプリでJavaやC#よりも優れたオプションかどうか疑問に思っています。

シュートアウト、Pythonは大きなマージンを失います。しかし、これらのベンチマークではサードパーティのライブラリを使用していないためだと思います。

役に立ちましたか?

解決

  1. 各実装のソースが表示されないベンチマークに疑問を呈します(または何か見落としていましたか?)これらのソリューションのいずれかまたは両方が不適切にコーディングされているため、どちらかまたは両方の言語のパフォーマンスが不公平に評価される可能性があります。 [編集] おっと、ソースが表示されました。ただし、他の人が指摘しているように、NumPy / SciPyライブラリを使用していないため、これらのベンチマークは決定に役立ちません。
  2. NumPyとSciPyの大部分はCで記述され、使いやすいようにPythonでラップされていると思います。
  3. おそらく、特定のアプリケーションにどれだけのオーバーヘッドがあるかは、これらの言語で何をしているのかに依存します。

Pythonをデータ処理と分析に2〜3年使用してきたので、確かに目的に合っていると思います。

一日の終わりに何を達成しようとしていますか?読み取り可能なコードを開発するための高速な方法が必要な場合、Pythonは優れたオプションであり、解決しようとしているものが何であれ最初の突き刺しに十分な速度です。

問題の小さなサブセットごとにbashを用意し、開発時間と実行時間の観点から結果をベンチマークしないのはなぜですか?その後、いくつかの関連データに基づいて客観的な決定を下すことができます...または少なくともそれは私がやることです:-)

他のヒント

その多くはCまたはフォートランで書かれています。ホットループをCで書き直すことができます(または、膨大な数の方法の1つを使用してPythonを高速化できます。ブースト/ウィーブが私のお気に入りです)。それは本当に重要ですか?

科学アプリは1回実行されます。残りはデバッグと開発に過ぎず、Pythonの方がはるかに高速です。

NumPyのほとんどはCにありますが、Cコードの大部分は「ボイラープレート」です。 Python / Cインターフェースのすべての汚れた詳細を処理します。 NumPyの場合、CとPythonの比率は50/50 ATM程度だと思います。

vmベースの低レベルの詳細についてはあまり詳しくありませんが、jvmおよび.clrに課せられた制限のために、インターフェイスコストが高くなると思います。 numpyが同様の環境よりも高速であることが多い理由の1つは、メモリ表現と、関数間で配列を共有/渡す方法です。ほとんどの環境(MatlabとRも信じている)がCopy-On-Writeを使用して関数間で配列を渡すのに対し、NumPyは参照を使用します。しかし、例えばJVMは困難です(ポインターの使用方法などの制限のため)。それは実行可能です(JythonのNumPyの初期のポートが存在します)が、この問題をどのように解決するかはわかりません。 C ++ / Cliでこれを簡単にできるかもしれませんが、その環境での経験はゼロです。

より良い比較がありますこちら(ベンチマークではなく、 Pythonを高速化する方法を示します)。 NumPyはほとんどがCで書かれています。Pythonの主な利点は、C(ctypes、swig、f2py)/ C ++(boost.python、weaveでコードを簡単に拡張する非常にの方法がいくつかあることです。 .inline、weave.blitz)/ Fortran(f2py)-またはPythonに型注釈を追加して、C(cython)に処理できるようにします。 C#やJavaでは比較的簡単なことはあまりないと思います-少なくとも、異なる型の数値配列を渡すことはあまり見かけずに処理します(ただし、Pythonのパフォーマンスペナルティがないため、支持者は主張するでしょうto)。

言語を処理する能力は常にあなた自身の能力に依存するため、言語は高速コードを生成できます。私の経験から、numpyは.NET実装よりも数倍遅いです。そして、JAVAも同様に高速になると期待しています。それらの最適化JITコンパイラは、長年にわたって大幅に改善され、非常に効率的な命令を生成します。

一方、

numpyには、スクリプト言語に適した構文を使用する方が簡単です。しかし、アプリケーション開発に関しては、これらの利点はしばしば障害になり、タイプセーフとエンタープライズIDEに憧れます。また、構文上のギャップはすでにC#で解消されています。 Java および。NET 。個人的にはC#を使用する傾向があります。より近代的な'。しかし、もちろん、これは私の個人的な経験です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top