Scipy には、何らかの操作を実行するために python callable を受け入れる多くの関数があります。scipy.optimize.leastsq特に、目的関数の引数として Python callable を受け入れる数学的最適化関数を使用しています。この目的関数はleastsq、最小化プロセス中に何度も呼び出すことができます。
私のプロファイリングは、その目的関数に多くの時間が費やされていることを示しています。Cython を使用して関数の一部を高速化しました。ただし、関数自体は依然として Python 関数であり、繰り返し呼び出す (leastsqそうであるように) オーバーヘッドがいくらかあります。
cdef関数がCython関数(の代わりに使用)であれば、さらに高速化できると思いますdef。そのため、Cython 拡張機能の内部に呼び出しを配置しleastsq、Cython 目的関数をそれに渡します。しかし、これを行うと、呼び出し時にコンパイル エラーが発生します。 leastsq
Cannot convert 'object (object, object, object)' to Python object
Python callables を必要とするこれらの Scipy 関数に Cython 関数を引数として渡す方法はありますか?
または、私の場合、基になる実装にアクセスし leastsq て Cython 目的関数を渡す方法はありますか?