python - 带有 numpy 矩阵的 Numba 未运行——未知属性

标签 python numpy numba

我正在做以下计算:

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.array,例如:

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 数据结构,因为后者受支持。矩阵对象只是有一些稍微不同的行为,因此应该很容易转换代码。

关于python - 带有 numpy 矩阵的 Numba 未运行——未知属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50023703/

相关文章:

python - 类方法返回迭代器

python - 如何在 numpy.random.generator 实例中存储和恢复随机状态?

python - 在 sklearn.decomposition.PCA 中,为什么 components_ 是负的?

python - 导入错误: No module named 'llvmlite.llvmpy.ee'

python - numba 的表现(我做错了什么吗?)

python - 您如何实现可从 Numba 调用的 C 以与 nquad 高效集成?

Python,当动画由传入传感器数据馈送时退出 matplotlib FuncAmination()

python - 我想使用 NumPy/SciPy。我应该使用 Python 2 还是 3?

python - python中的ssh网关 - 可用颜色?

python - 无法使用 python 3.10 启动 Airflow Web 服务器