2014-07-21 92 views
0

我有一个多维数组“test [:,:,:]”,我想在test.shape [0]维上获得平均值,每4“框架“我想保持我的阵列相同的尺寸,并用平均值替换4个值。Python - 每个特定时间numpy多维数组的平均值

作为例子:

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. 

但是,我不保持相同的尺寸...什么是做到这一点的最好方法是什么?

+0

“我不保留同一维度”的含义并不十分清楚。因此,对于(9,2,3)数组'test',是否需要一个(9,2,3)数组作为结果,(2,2,3)数组还是其他?如果你可以明确地为'test_mean'添加正确的结果作为参考,我们可以帮助你。 – Stefan

+0

在发布问题后保持在线状态也是一个好主意。否则潜在的回答者可能会继续前进,如果他们不能让你对澄清请求发表评论。 – Stefan

+0

正如我所说,我想保留(9,2,3)阵列!谢谢;)(我必须去)。 – user3601754

回答

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) 

检查文档来了解结果如何存储和你有什么方案治疗边界值。