我在做以下计算:
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有并行化的工具,对吗?它们能适用于我的案子吗?在
感谢您抽出时间:)
numba支持的所有numpy功能都列在文档的下一页中:
http://numba.pydata.org/numba-doc/latest/reference/numpysupported.html
未列出对numpy矩阵对象的支持,因此目前无法在numba jitted程序中使用它们。如果你正在做的事情很容易矢量化,并且不涉及创建许多中间数组对象,那么你从numba获得的速度可能会受到限制。您可以尝试从}数据结构,因为后者是受支持的。矩阵对象只是有一些稍有不同的行为,所以应该很容易转换代码。在
matrix
切换到{相关问题 更多 >
编程相关推荐