Python Numpy查找数组小范围内最大值的索引
我有一个二维数组的形式Python Numpy查找数组小范围内最大值的索引,python,numpy,search,max,intervals,Python,Numpy,Search,Max,Intervals,我有一个二维数组的形式 data = array([ [ 0.23 , 0.61070541], [ 1.12 , 0.94622007], [ 2.33 , 0.20868555], [ 3.23 , 0.26452314], [ 4.67 , 0.93988767], [ 5.17 , 0
data = array([
[ 0.23 , 0.61070541],
[ 1.12 , 0.94622007],
[ 2.33 , 0.20868555],
[ 3.23 , 0.26452314],
[ 4.67 , 0.93988767],
[ 5.17 , 0.05736691],
[ 6.74 , 0.54063927],
[ 7.58 , 0.3045981 ],
[ 8.48 , 0.13873822],
[ 9.47 , 0.27759926],
[ 10.12 , 0.27030156]])
我想在第二列中找到最大值,限制在第一列给出的间隔内。我想查看第5行到第8行,并在第二列中找到最大值的最大行索引。在第6行的给定数据集中,数据[6]=6,0.54063927. 我的目标是使用numpy获得索引6。到目前为止,我已经做到了
data_interval = data[ np.where( (data[:,0] > 5) & data[:,0] < 9 ) ]
max_interval = data_interval.max(axis = 0)[1]
index = np.where(data == [None, max_interval])[0]
data\u interval=data[np.其中((data[:,0]>5)和data[:,0]<9)]
最大间隔=数据间隔。最大(轴=0)[1]
索引=np。其中(数据==[无,最大间隔])[0]
如果最大值在间隔之外的数据中未再次出现,则此操作有效。否则,我将进入最后一个np.where调用多个索引。总的来说,这感觉很难处理,我想知道是否有一种更快的方法只产生区间内的指数我要的是与总数据数组相关的绝对索引,而不是数据间隔数组的索引。
通常,我发现很难在numpy中对数据进行排序/搜索,因为数据集是成对的,比如(x,y),只基于x或y,一旦数据在一个数组中组合在一起。处理此类问题的提示/建议是受欢迎的。我们可以这样做,首先屏蔽条件不适用的值,然后使用argmax
,计算第二列为最大值的索引
因此,我们用:
data_masked = np.ma.masked_where((data[:,0] < 5) | (data[:,0] > 9), data[:,1])
然后我们用以下公式计算指数:
index = np.argmax(b)
谢谢,我自己也试过用遮罩,但不知道如何正确地将遮罩应用到第二列。其他掩码函数的工作方式是否类似,并将作为次要参数传递的数据掩码?@HansWurst:好的想法是,对于掩码元素,值不可用,因此从概念上讲,这意味着它们无法访问afaik元素。
index = np.argmax(b)