You need to enable JavaScript to run this app. 如何求解numpy数组每行最小值且各最小值来源列唯一
优惠活动
大模型
产品
解决方案
定价
更多

如何求解numpy数组每行最小值且各最小值来源列唯一

求解numpy数组每行取唯一列最小值的高效方案

问题本质

你的需求属于经典的最小权指派问题:需要从n行n列的矩阵中选取n个元素,满足每行、每列仅选中一个元素,且选中元素的总和最小,完全匹配你要求的「每行选最小值、列不重复」的约束。

高效实现方案

直接调用scipy.optimize.linear_sum_assignment即可,它是匈牙利算法的工业级实现,时间复杂度为O(n³),远优于递归枚举的O(n!)阶乘级复杂度。

示例代码

import numpy as np
from scipy.optimize import linear_sum_assignment

# 你给出的示例数组
a = np.array([
    [4, 5, 6],
    [1, 2, 3],
    [7, 8, 9]
])

# 计算最优行列匹配
row_indices, col_indices = linear_sum_assignment(a)

# 得到符合约束的结果
result = a[row_indices, col_indices]
print(result) # 输出 [5 1 9]

非方阵兼容处理

如果你的数组不是方阵(行数≠列数),可以做补全处理:

  • 行数>列数:给矩阵补列,填充足够大的数值(比如np.inf),保证补的列不会被选中
  • 列数>行数:给矩阵补行,填充足够大的数值即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 07:12:03