Numpy查找小范围数组内的最大值索引

时间:2018-02-16 15:10:28

标签: 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.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]

如果最大值在间隔之外的数据中没有出现,则此方法有效。否则我会在最后一个np.where调用多个索引。总的来说,这感觉很笨拙,我想知道是否有一种更快的方式只产生间隔中的指数。 我希望absolut索引相对于总数据数组,而不是data_interval数组的索引。 一般来说,我发现很难对numpy中的数据进行排序/搜索,因为一旦数据在一个数组中,成对的数据集就像(x,y)一样只基于x或y。欢迎提供处理此类问题的提示/建议。

1 个答案:

答案 0 :(得分:0)

我们可以先执行此操作屏蔽条件的值,然后使用argmax来计算第二个的索引列是最大值。

所以我们掩饰:

data_masked = np.ma.masked_where((data[:,0] < 5) | (data[:,0] > 9), data[:,1])

所以这里的条件是过滤条件的相反data[:0] < 5data[:0] > 9被屏蔽掉的所有行。请注意,我们已经对第二列进行了投影。然后是中间结果:

>>> np.ma.masked_where((data[:,0] < 5) | (data[:,0] > 9), data[:,1])
masked_array(data=[--, --, --, --, --, 0.05736691, 0.54063927, 0.3045981,
                   0.13873822, --, --],
             mask=[ True,  True,  True,  True,  True, False, False, False,
                   False,  True,  True],
       fill_value=1e+20)

然后我们用:

计算索引
index = np.argmax(b)
相关问题