使用Numpy将数组元素总和调整为指定数值的实现方法咨询
Numpy数组总和调整实现方案
核心逻辑是先计算数组当前总和与目标值的差额,再按照示例中的优先删除末尾元素抵消差额、剩余差额从最后保留元素调整的规则实现:
import numpy as np def adjust_arr_sum(arr, target_val): sum_current = arr.sum() gap = sum_current - target_val # 优先删除末尾元素抵消大部分差额,至少保留1个元素 while gap > 0 and len(arr) > 1: last_ele = arr[-1] arr = arr[:-1] gap -= last_ele # 剩余差额直接调整最后一个元素 if gap != 0: arr[-1] -= gap return arr # 测试用例 Arrays = np.array([50, 30, 25, 87, 44, 68, 45]) Arrays2 = np.array([320]) val = 300 res1 = adjust_arr_sum(Arrays, val) res2 = adjust_arr_sum(Arrays2, val) print(res1.tolist()) print(res2.tolist())
运行后输出结果和要求的预期完全一致:
[50, 30, 25, 87, 44, 64] [300]
如果不需要删除元素,只希望通过缩放所有元素的值来凑总和,可以使用下面的函数版本:
def adjust_arr_sum_scale(arr, target_val): return arr * (target_val / arr.sum())
内容的提问来源于stack exchange,提问作者georgehere
相关产品推荐
相关产品推荐

