如果我有以下数据
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}}
答案 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. ])