使用索引数组查找平均值

时间:2014-07-15 15:29:10

标签: python numpy average

如果我有以下数据

In [203]: data
Out[203]: 
array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])

In [206]: index
Out[206]: 
array([[0, 2],
       [1, 0],
       [2, 7],
       [3, 4]])

如何使用索引查找数据的平均值。平均值应取整行,直至并包括指数,即

In [209]: data[index[0, 0], :index[0, 1]+1]
Out[209]: array([0, 1, 2])

In [210]: np.mean(bd[index[0, 0], :index[0, 1]+1])
Out[210]: 1.0

最终结果应该是

1.0
0.0
3.5
2.0

The index was achieved using these methods.基本上,我有

In [223]: bins
Out[223]: array([ 0,  2,  4,  6,  8, 10, 12, 14, 16, 18])

In [224]: height
Out[224]: 
array([[ 6],
       [ 2],
       [15],
       [10]])

我需要取data bins的平均值height小于data(len(height), len(bins)的形状位于(4,10)中这种情况是{{1}}

1 个答案:

答案 0 :(得分:2)

实现这一目标的一个很好的显式方法是使用Numpy的掩码数组功能,如下所示:

>>> data
array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
       [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])
>>> index
array([[0, 2],
       [1, 0],
       [2, 7],
       [3, 4]])
>>> data_ma = np.ma.array(data, mask = np.arange(data.shape[1]) > index[:, 1, None]) 
>>> np.array(data_ma.mean(axis=1))
array([ 1. ,  0. ,  3.5,  2. ])