2

PythonをCythonに変換して、Pythonを高速化しようとしています。関数scipy.integrate.quadを使用します。この関数には、引数の1つとして呼び出し可能なPythonが必要です。Cythonのcdefステートメント内から関数を定義して渡す方法はありますか?これを使用できますか?

ありがとう。

4

1 に答える 1

3

はい、Python関数で関数をラップする必要があります。

def py_callback(a):
   return c_callback(a)

cdef float c_callback(float a):
   return a * a

...
scipy.integrate.quad(py_callback)

もちろん、変換の過負荷が少しあります。別の方法は、その関数がどのように実装されているかを調べることです。

  • がC関数のラッパーである場合は、pyxファイルからC関数を直接呼び出そうとします(scipy Cモジュールをラップするpxdを作成します)。
  • 純粋なPythonの場合は、それをcythonに変換しようとします。

それ以外の場合は、他の純粋なC統合関数を使用して、scipy関数をスキップする必要があります。

于 2011-08-09T19:23:27.080 に答える