使用数组作为指标沿轴应用

时间:2015-06-30 23:43:12

标签: python numpy indexing vectorization

我试图在没有循环的情况下就地执行此功能:

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

2 个答案:

答案 0 :(得分:1)

trend = np.fromiter((np.convolve(dat[i,0], aW3[:,i], 'same').sum() for i in xrange(2)), float)

答案 1 :(得分:1)

您似乎可以np.einsum使用vectorized解决方案,就像这样 -

trend = np.einsum('i,ji->i',dat[0:aW3.shape[1],0],aW3)

broadcasting -

trend = (dat[0:aW3.shape[1],0]*aW3).sum(0)