9

これが私の基本的な問題です:

をインポートしたPythonファイルがあります

from math import sin,cos,sqrt

開発者が 100% CPython コードを記述し、Python 用に開発された優れたツールを使用できるようにするには、このファイルを 100% CPython 互換にする必要があります。

ここで、Cython に入ります。私の Python ファイルでは、trig 関数が何百万回も呼び出されます (コードの基本であり、これを変更することはできません)。メインのpythonファイルのPython-fu、またはCythonマジックを介して、代わりにCythonコードのバリエーションを使用してC/C++数学関数を使用する方法はありますか

cdef extern from "math.h":
    double sin(double)

これにより、C に近いパフォーマンスが得られます。これは素晴らしいことです。

ステファンの話では具体的にこれはできないと言っていますが、その話は 2 年前のものであり、世の中には多くのクリエイティブな人々がいます

4

4 に答える 4

2

私はCythonの専門家ではありませんが、AFAIKでできることは、Cythonラッパーを作成してsin呼び出すことだけです。ただし、Python呼び出しセマンティクスをまだ使用しているため、これが実際に高速になるとは想像できませんmath.sin。オーバーヘッドは、関数を呼び出すためのすべてのPythonのものにあり、使用時にCで実行される実際の三角関数の計算ではありません。 CPythonも。

ソースをCPython互換にするCythonピュアモードの使用を検討しましたか?

于 2012-04-27T12:57:32.147 に答える
0

私はあなたの問題を誤解しているかもしれませんが、外部 C コードとのインターフェースに関する Cython のドキュメントは、次の構文を示唆しているようです:

cdef extern from "math.h":
    double c_sin "sin" (double)

これにより、sinC コード ( の関数に正しくリンクされるようにmath.h) とc_sinPython モジュールで関数に名前が付けられます。math.sinただし、この場合にこれが何を達成するのかを理解しているかどうかはよくわかりません-なぜCythonコードで使用したいのですか? 静的に型付けされた変数と、動的に型付けされた変数がありますか?

于 2012-04-27T13:16:54.883 に答える