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 目的関数を渡す方法はありますか?