You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取numpy二维数组中第二小值的索引?

获取Numpy数组第二小值的索引

嘿,我来帮你搞定这个问题!你已经用argmin找到了数组的最小值索引,但因为你的数组对角线都是最小值0.0,现在需要定位第二小值(也就是0.5)的位置,这里有几种可靠的解决方案:

方法一:屏蔽最小值后找新的最小值索引

这个思路很直观:先把原数组里所有等于最小值的位置替换成一个极大值(比如无穷大),这样剩下的数组里的最小值就是原数组的第二小值,再用argmin就能拿到对应的索引。

import numpy as np

# 你的原始数组
a = np.array([[ 0. , 0.71, 5.66, 3.61, 4.24, 3.2 ],
              [ 0.71, 0. , 4.95, 2.92, 3.54, 2.5 ],
              [ 5.66, 4.95, 0. , 2.94, 1.41, 2.5 ],
              [ 3.61, 2.92, 2.94, 0. , 1. , 0.5 ],
              [ 4.24, 3.54, 1.41, 1. , 0. , 1.12],
              [ 3.2 , 2.5 , 2.5 , 0.5 , 1.12, 0. ]])

# 1. 获取数组的最小值
min_val = a.min()

# 2. 创建掩码,把等于最小值的位置替换为无穷大,保留其他值
a_masked = np.where(a != min_val, a, np.inf)

# 3. 获取第二小值的索引
row, col = np.unravel_index(a_masked.argmin(), a.shape)
print(f"第二小值的索引:({row}, {col})")  # 输出:(3, 5)

方法二:获取所有第二小值的索引

如果你的第二小值存在多个匹配位置(比如这里的(3,5)和(5,3)),可以用下面的方法一次性拿到所有符合条件的索引:

# 先拿到第二小值的具体数值
second_min_val = a_masked.min()

# 找到所有等于第二小值的位置
all_indices = np.argwhere(a == second_min_val)
print("所有第二小值的索引:")
print(all_indices)
# 输出:
# [[3 5]
#  [5 3]]

小提示:为什么不直接排序?

你可能会想到把数组展开后排序取第二个元素的索引,但原数组里有6个最小值0.0,直接排序后的前几个元素都是0,无法直接定位到第二小值。所以必须先排除所有最小值,上面的方法就完美解决了这个问题。

内容的提问来源于stack exchange,提问作者ronak07

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:41:42