Numba和numpy矩阵没有运行未知属性

2024-04-27 00:21:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我在做以下计算:

y = np.mat(np.log(datay))   
x = np.mat([datax**2, datax, np.ones(len(datax))]).T
popt = (x.T * x).I * x.T * y.T

datax和datay是正常的1Dnp.数组例如:

^{pr2}$

计算结果很好。但我想加快速度,所以我试着把它放在numba中:(我对numba很陌生…但想试试看)

@jit(nopython=True)
def calc(datax, datay):
    y = np.mat(np.log(datay))   
    x = np.mat([datax**2, datax, np.ones(len(datax))]).T
    return (x.T * x).I * x.T * y.T

但这不会发生。我得到以下错误

Failed at nopython (nopython frontend)

Unknown attribute 'matrix' of type Module numpy

我怎样才能让它工作呢?在


第二件事是: 你可能注意到了,我在计算一个二阶多项式的参数。我需要尽快得到,因为我需要经常这样做。所以现在我只是循环一下

result = np.zeros(len(datay), 3)
datax  = np.array([1,2,3,4)]  
x = np.matrix([datax**2, datax, np.ones(len(datax))]).T  
for i, data in enumerate(datay):
    data = np.array(data-baseline)
    if (any(i <= 0 for i in data)): continue
    try:
        y = np.matrix(np.log(data))                 
        result[i] = ((x.T * x).I * x.T * y.T).A1

我怎样才能加快速度:把所有的东西都放在一个numba函数中,希望编译能做到?或者还有其他聪明的方法吗? numba有并行化的工具,对吗?它们能适用于我的案子吗?在

感谢您抽出时间:)


Tags: logfordatalennponesresultarray
1条回答
网友
1楼 · 发布于 2024-04-27 00:21:16

numba支持的所有numpy功能都列在文档的下一页中:

http://numba.pydata.org/numba-doc/latest/reference/numpysupported.html

未列出对numpy矩阵对象的支持,因此目前无法在numba jitted程序中使用它们。如果你正在做的事情很容易矢量化,并且不涉及创建许多中间数组对象,那么你从numba获得的速度可能会受到限制。您可以尝试从matrix切换到{}数据结构,因为后者是受支持的。矩阵对象只是有一些稍有不同的行为,所以应该很容易转换代码。在

相关问题 更多 >