【发布时间】:2013-09-28 06:40:53
【问题描述】:
下面的代码完全符合我的要求(它是克里金法的一部分)。但问题是它运行得太慢了,我想知道是否有任何选项可以将 for 循环推到 numpy?如果我推出 numpy.sum,并在那里使用轴参数,它会加快一点,但显然这不是瓶颈。关于如何将 forloop 下推到 numpy 以加快速度或其他方式来加快速度的任何想法?)
# n = 2116
print GRZVV.shape # (16309, 2116)
print GinvVV.shape # (2117, 2117)
VVg = numpy.empty((GRZVV.shape[0]))
for k in xrange(GRZVV.shape[0]):
GRVV = numpy.empty((n+1, 1))
GRVV[n, 0] = 1
GRVV[:n, 0] = GRZVV[k, :]
EVV = numpy.array(GinvVV * GRVV) # GinvVV is numpy.matrix
VVg[k] = numpy.sum(EVV[:n, 0] * VV)
我发布了 ndarrays n 矩阵的维度来清除一些东西
编辑:VV 的形状是 2116
【问题讨论】:
-
如果
VV.shape == (16309,),你怎么能把它乘以EVV[:n, 0],它的形状是(n,)? -
也许循环的最后一行应该有
EVV[:n, 0] * VV[k],这似乎是@Jaime 的回答所假设的。 -
@askewchan 的形状是 2116,那里有点混乱,我编辑了它,