Python中如何实现两个数组元素对应相乘的最大和?附NumPy示例
两个数组元素配对最大乘积和的实现方法
你要的是让两个数组的元素一一配对(每个元素仅使用一次)后,乘积之和最大的结果,这对应数学里的排序不等式:将两个数组按相同顺序(同时升序或同时降序)排列后,对应元素相乘再求和,得到的就是最大乘积和。
具体实现(基于NumPy)
NumPy没有专门的现成函数直接做这个,但用排序功能就能快速搞定:
import numpy as np a = np.array([1, 1, 1, 4]) b = np.array([1, 4, 1, 1]) # 方案1:同时升序排序后计算乘积和 max_sum = np.sum(np.sort(a) * np.sort(b)) # 方案2:同时降序排序,结果和方案1一致 max_sum = np.sum(np.sort(a)[::-1] * np.sort(b)[::-1]) print(max_sum) # 输出19,和你示例里的计算结果一致
对应你的示例验证
你给出的示例计算式 a[3]*b[1] + a[0]*b[0] + a[1]*b[2] + a[2]*b[3] 本质就是把a按降序排([4,1,1,1])、b也按降序排([4,1,1,1])后对应相乘求和,结果正好是19,和代码计算结果完全匹配。
如果需要求最小乘积和,只要把其中一个数组升序、另一个降序后相乘求和即可:
min_sum = np.sum(np.sort(a) * np.sort(b)[::-1])
内容的提问来源于stack exchange,提问作者learning statistics
相关产品推荐
相关产品推荐

