【发布时间】:2015-09-17 23:06:02
【问题描述】:
我正在尝试在没有循环的情况下就地执行此功能:
for i in xrange(2):
trend[i] = np.convolve(dat[i,0], aW3[:,i], 'same').sum()
我最好的尝试如下:
trend[:2] = np.apply_along_axis(
func1d=lambda x: np.convolve(x, aW3[:,i], 'same').sum(),
axis=1,
arr=dat[:2,0])
但我不知道如何正确索引 aW3[:,i] 到 func1d
使用的常量
aW3 = np.array( [[ 0.259, 0.407],
[ 0.37 , 0.407],
[ 0.259, 0.185],
[ 0.111, 0. ]])
dat = np.array([0.02360784, 0.0227628 , 0.0386366 , 0.03338596, 0.03141621, 0.03430469])
dat = dat.reshape(dat.shape[0], 1) # in columns
【问题讨论】:
-
很难知道你要做什么,因为第一个循环没有真正意义......如果你打印出
dat[i,0],你会发现它只是一个标量,所以你的卷积只是一个乘法。 -
是的,我简化了一个更复杂的计算。我保留了这个函数,因为我想强调它不仅仅是一个乘法,我想要一个广义的函数解
-
您的示例对您问题的具体点没有意义,使您的问题不清楚。我的猜测是
scipy.ndimage.filters.convolve1d可能会做你想做的事。 -
谢谢,这可能会简化我的实际代码。我对上述的理论解决方案很感兴趣,以便学习
标签: python numpy indexing vectorization