1
をJITコンパイルされた私のコードは次のようになります。は、だからここに機能
@jit(nopython=True)
def sum_fn(arg1, arg2, ...argn):
.....
for i in xrange(len(arg2)): #For each bin
l, p = fn1(arg1, arg2...argn)
res = res + fn2(arg1, arg2, arg3)
return res
@jit(nopython=True)
def fn1(a1, a2,...an):
....
return r1, r2
def fn2(l_lk, l_pk, l_lvals):
f_i = interp1d(l_lk, l_pk,kind='linear') #Scipy.interpolate.interp1d
ftmp = fn3(f_i,l_lk,l_pk)
return 10**ftmp(l_lvals)
それはnumbaコンパイルプロセスにインポートされていないので、FN2を呼び出すと、エラーを与えることが表示されますfn1とは異なり、これはジッタされる。残念ながら、Numbaで認識されないscipy.interpolate.interp1d関数を使用しているため、fn2をjitできません。これを回避するにはどうしたらいいですか?
私は線形補間を自分で書いてみてくださいし、それにnumbaを使用しました。しかし、少なくとも試行データでは、scipyインターポレータは、私が書き込んだ線形補間器+ numbaよりも大幅に高速に動作しました。これは可能性がありますか、これは私が補間子コードを非常に非効率的に書いたことを意味しますか?図書館をありがとう、私はそれを見てみましょう。 – Neodymia
あなたの線形補間スキームが、それを見なくてもscipyのものよりも効率的でない理由は言うまでもありませんが、私が推測する性能はかなり類似しているものを得ることが可能でなければなりません。 – JoshAdel