如何计算多个numpy数组组成的列表的加权平均值?
实现numpy数组的加权平均计算
你需要完成的是加权算术平均计算,核心逻辑是每个位置的元素等于对应数组元素乘以权重后的总和,再除以权重的总和。以下是几种简洁高效的实现方式:
方法一:使用np.average(推荐)
numpy内置的average函数支持直接传入权重参数,是最贴合需求的方案:
import numpy as np w = [1, 3] l2 = [np.array([3, 3]), np.array([1, 1])] # 转换为二维数组后按列计算加权平均 result = np.average(np.array(l2), axis=0, weights=w) print(result) # 输出: array([2., 2.])
解释:np.array(l2)将列表中的一维数组转为2×2的二维数组,axis=0指定对每一列(即每个元素位置)计算加权平均,weights=w对应每个数组的权重。
方法二:手动实现(直观易懂)
如果想明确看到计算逻辑,可以用numpy的广播机制手动完成:
import numpy as np w = [1, 3] l2 = [np.array([3, 3]), np.array([1, 1])] total_weight = sum(w) # 加权求和后除以总权重 result = (w[0] * l2[0] + w[1] * l2[1]) / total_weight print(result) # 输出: array([2., 2.])
这种写法适合数组数量较少的场景,逻辑清晰直白。
方法三:通用扩展写法(适配任意数量数组)
如果你的数组和权重列表长度不确定,可以用np.dot实现通用计算:
import numpy as np w = [1, 3] l2 = [np.array([3, 3]), np.array([1, 1])] w_arr = np.array(w) l2_arr = np.array(l2) # 权重与数组的点积得到加权和,再除以总权重 result = np.dot(w_arr, l2_arr) / w_arr.sum() print(result) # 输出: array([2., 2.])
此写法不受数组数量限制,扩展性更强。
内容的提问来源于stack exchange,提问作者Nick
相关产品推荐
相关产品推荐

