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

查找两个关联矩阵min(A(i,j),B(j,k))最大值的最快Python实现方法

最大化min(A[i,j], B[j,k])的高效numpy实现

核心优化思路

我们可以完全不需要枚举所有(i,j,k)组合,基于以下逻辑就能得到最优解:

对于固定的中间索引j,要让min(A[i,j], B[j,k])取到最大值,最优选择必然是取A第j列的最大值和B第j行的最大值,两者的最小值就是当前j能贡献的最大f值。全局最优解一定是所有j对应的最大f值中最高的那个,对应索引组合就是答案。

实现代码

import numpy as np

shape_a = (100, 150)
shape_b = (shape_a[1], 200)

A = np.random.rand(shape_a[0], shape_a[1])
B = np.random.rand(shape_b[0], shape_b[1])

# 对每个j,计算A第j列的最大值和对应i索引
max_A_per_j = A.max(axis=0)
best_i_per_j = A.argmax(axis=0)

# 对每个j,计算B第j行的最大值和对应k索引
max_B_per_j = B.max(axis=1)
best_k_per_j = B.argmax(axis=1)

# 计算每个j对应的最大f值
f_per_j = np.minimum(max_A_per_j, max_B_per_j)

# 找到最优的j
best_j = f_per_j.argmax()

# 得到最优三元组
best_indices = (best_i_per_j[best_j], best_j, best_k_per_j[best_j])
print(best_indices)

方案优势

  • 完全保留numpy矩阵运算的速度优势,时间复杂度仅为O(I*J + J*K),比原方案的O(I*J*K)快数十到上百倍,维度越大性能差距越明显
  • 无需构造百万级大小的组合数组、A_vals和B_vals数组,所有中间数组的大小仅等于中间维度J的大小,内存占用可以忽略不计

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:24:04