我想使用 numpy argwhere 来查找数据中的最大值在哪里。下面是一个示例集,描述了我正在做的事情:
bins = np.arange(10)
data = np.array([[6],[4],[8],[5]])
np.argwhere(bins<data)
array([[0, 0],
[0, 1],
[0, 2],
[0, 3],
[0, 4],
[0, 5],
[1, 0],
[1, 1],
[1, 2],
[1, 3],
[2, 0],
[2, 1],
[2, 2],
[2, 3],
[2, 4],
[2, 5],
[2, 6],
[2, 7],
[3, 0],
[3, 1],
[3, 2],
[3, 3],
[3, 4]])
我想从这个数据中得到的是
array([[0,5],
[1,3],
[2,7],
[3,4]])
这可以通过 for 循环来完成,但我想知道是否有更 Pythonic 的方法来做到这一点。
EDIT:
我现在所做的是使用 Pandas 和 groupby。我仍然想知道这是否是最好的方法。
t = pd.DataFrame(np.argwhere(bins<data))
time = t.groupby(0)
time.max()
1
0
0 5
1 3
2 7
3 4
现在我有了这个,我有一个新问题。假设我有另一组数据:
BigData = np.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]])
我如何使用我获得的数组
array([[0,5],
[1,3],
[2,7],
[3,4]])
放入此新数据以获得第二列中索引的 BigData 平均值。 IE
(0+1+2+3+4) / 5
(0+1+2) / 3
(0+1+2+3+4+5+6) / 7
(0+1+2+3) / 4
将是 BigData 的返回值,假设我们获得了第二列中发生这种情况的索引值。