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

标签 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 行,data[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 调用多个索引。总的来说,这感觉很笨拙,我想知道是否有一种更快的方法只产生区间内的索引。 我想要相对于总数据数组的绝对索引,而不是 data_interval 数组的索引。 一般来说,一旦数据集中在一个数组中,我发现很难在 numpy 中对仅基于 x 或 y 的成对数据集(如 (x,y))进行排序/搜索数据。欢迎提供处理此类问题的提示/建议。

最佳答案

我们可以通过首先屏蔽条件成立的值来做到这一点,然后使用 argmax ,计算第二列最大的索引。

所以我们用以下内容掩盖:

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

所以这里的条件与过滤条件相反:data[:0] < 5 的所有行或data[: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)

关于python - Numpy 查找小范围数组内最大值的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48829633/

相关文章:

python - 如何获取 numpy 数组中给定项目的列索引和行索引(y 和 x)

python - 通过带有数组列表的 numpy 数组进行广播

java - 在java中的有序列表中进行二进制搜索

Python- Pandas : AttributeError: 'numpy.ndarray' object has no attribute 'start'

python - 从 python 和 launchd 启动 osascript

python - 更改使用导出 graphviz 创建的决策 TreeMap 的颜色

python - 图像的 RGB 矩阵

python - 将 Python 列表拆分为更小的子字符串

ios - 在 NSArray 中搜索值的范围

c++ - 如何通过函数(不在任何类中)在类中使用私有(private)变量?