我一直在尝试使用numpy库中的线性插值函数来加速某些代码。到目前为止,我尝试使用“ Jit”装饰器进行了很大的改进,但是我想使用guvectorize装饰器,因为我将在大量数据上使用此功能。不幸的是,我无法设置装饰器。
这个想法是传递一个向量,其中我要插入-t作为浮点数-日期向量-还作为浮点数-以及比率矩阵-也浮点数-大小为(n_rates,m_dates),列大小将匹配。
当代码设置为CPU或并行计算时,所有工作正常,但是将代码设置为cuda时失败。
target='cuda'
@nb.guvectorize(["f8[:], f8[:], f8[:,:], f8[:,:]"], "(n),(y),(y,x) -> (n,x)", nopython=True, target=target)
def _nb_discount(t,dates,rates,res):
for i in range(rates.shape[0]):
res[i,:] = 1/(1+np.interp(t,dates,rates[i,:])*t)
我收到以下错误:
Invalid use of Function(<built-in function mul>) with argument(s) of type(s): (array(float64, 1d, C), array(float64, 1d, A))
但是因为它在设置target='cpu'
时有效,所以我很困惑。