在numba guvectorize中定义正确的签名

时间:2019-07-22 20:50:23

标签: python numpy numba

我一直在尝试使用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'时有效,所以我很困惑。

0 个答案:

没有答案