Numba with numpy matrix not 运行 -- Unknown attribute

Numba with numpy matrix not running -- Unknown attribute

我正在做以下计算:

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都是普通的一维np.arrays eg:

datay = np.array([1,4,9,16])
datax = np.array([1,2,3,4])

计算运行良好。但我想加快速度,所以我试着把它放在 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 有并行化工具吗?它们可以适用于我的情况吗?

感谢您的宝贵时间:)

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

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

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