Numpy 在数组的小范围内查找最大值索引
Numpy Find Index of Maximum Value inside small range of array
我有一个形式为
的二维数组
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 中对成对出现的数据集执行 sorting/searching 数据,例如 (x,y) 仅基于 x 或 y 一旦数据一起放在一个数组中。 Hints/Advice欢迎处理此类问题
我们可以先屏蔽掉条件不的值,然后使用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)
我有一个形式为
的二维数组 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 中对成对出现的数据集执行 sorting/searching 数据,例如 (x,y) 仅基于 x 或 y 一旦数据一起放在一个数组中。 Hints/Advice欢迎处理此类问题
我们可以先屏蔽掉条件不的值,然后使用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)