【发布时间】:2015-11-08 19:50:01
【问题描述】:
沿 3d numpy 数组的 Z 向量执行卷积,然后对结果进行其他操作,但它现在实现起来很慢。是 for 循环在这里减慢了我的速度还是卷积?我尝试整形为一维向量并在 1 次通过中执行卷积(就像我在 Matlab 中所做的那样),没有 for 循环,但它并没有提高性能。我的 Matlab 版本比我在 Python 中想出的任何东西都要快 50%。相关代码段:
convolved=np.zeros((y_lines,x_lines,z_depth))
for i in range(0, y_lines):
for j in range(0, x_lines):
convolved[i,j,:]= fftconvolve(data[i,j,:], Gauss) #80% of time here
result[i,j,:]= other_calculations(convolved[i,j,:]) #20% of time here
有比 for 循环更好的方法吗?听说过 Cython,但我目前在 Python 方面的经验有限,会以最简单的解决方案为目标。
【问题讨论】:
-
什么是
Gauss?某种一维高斯核?如果是这样,相对于z_depth的大小是多少? -
高斯核在循环之前生成一次。数据是一维向量(z_depth),通常长度约为 1535 个元素,长度通常为 79 的一维高斯核。我在 fftconvolve 中清理了一堆开销,基本上只是直接进入 irfftn(rfftn(in1, fshape) * rfftn(in2 , fshape), fshape)[fslice].copy()
标签: python arrays for-loop numpy convolution