2014-10-29 179 views
3

我在numpy中有数以千计的val数组。我想通过平均相邻值来减小它的大小。 例如:用numpy平均相邻值来减小数组大小

a = [2,3,4,8,9,10] 
#average down to 2 values here 
a = [3,9] 
#it averaged 2,3,4 and 8,9,10 together 

所以,基本上,我对的数组元素的n个,我想告诉它向下平均为值X数目,并且它的平均值等的上方。

有没有办法做到这一点与numpy(已经使用它的其他事情,所以我想坚持下去)。

+1

我打算提出'reshape'然后'mean',但是这与[这个问题]接受的答案是一样的(http:// stackoverflow.com/questions/20322079/downsample-a-1d-numpy-array)。这会为你的目的工作吗? – DSM 2014-10-29 18:56:37

+0

@AdamHaile你试过下面的答案 – 2015-05-27 16:29:09

回答

0

看起来像一个简单的非重叠的移动窗平均给我,怎么样:

In [3]: 

import numpy as np 
a = np.array([2,3,4,8,9,10]) 
window_sz = 3 
a[:len(a)/window_sz*window_sz].reshape(-1,window_sz).mean(1) 
#you want to be sure your array can be reshaped properly, so the [:len(a)/window_sz*window_sz] part 
Out[3]: 
array([ 3., 9.]) 
0

试试这个:

n_averaged_elements = 3 
averaged_array = [] 
a = np.array([ 2, 3, 4, 8, 9, 10]) 
for i in range(0, len(a), n_averaged_elements): 
    slice_from_index = i 
    slice_to_index = slice_from_index + n_averaged_elements 
    averaged_array.append(np.mean(a[slice_from_index:slice_to_index])) 

>>>> averaged_array 
>>>> [3.0, 9.0] 
5

正如在评论中提到,你想要的可能是:

group = 3 
a = a.reshape(-1, group).mean(axis=1) 
相关问题