Python - 每个特定时间的numpy多维数组的平均值

时间:2014-07-21 10:48:06

标签: python arrays numpy average

我有一个多维数组"测试[:,:,]]"我希望得到test.shape [0]维度的平均值,每4"帧"我想保持我的数组的相同尺寸,并用平均值代替4个值。

例如:

test=np.array([[[ 2.,  1.,  1.],
        [ 1.,  1.,  1.]],

       [[ 3.,  1.,  1.],
        [ 1.,  1.,  1.]],

       [[ 3.,  1.,  1.],
        [ 1.,  1.,  1.]],

       [[ 5.,  1.,  1.],
        [ 1.,  1.,  1.]],

       [[ 2.,  1.,  1.],
        [ 1.,  1.,  1.]],

       [[ 3.,  1.,  1.],
        [ 1.,  1.,  1.]],

       [[ 3.,  1.,  1.],
        [ 1.,  1.,  1.]],

       [[ 5.,  1.,  1.],
        [ 1.,  1.,  1.]],

       [[ 2.,  1.,  1.],
        [ 1.,  1.,  1.]]])        


for i in range(test.shape[0]-1,4):
    test_mean = (test[i,:,:]+test[i+1,:,:]+test[i+2,:,:]+test[i+3,:,:])/4.

但是,我没有保持同样的维度......最好的方法是什么?

1 个答案:

答案 0 :(得分:2)

您每次都会覆盖test_mean。一个好的开始是:

test_mean = np.zeros_like(test)
for i in xrange(test.shape[0]-4):
    test_mean[i] = test[i:i+4].mean(axis=0)

以下是来自scipy的更有效的实施方式:

from scipy.ndimage import uniform_filter1d
test_mean2 = uniform_filter1d(test, 4, axis=0)

检查文档以了解结果的存储方式以及处理边界值的选项。