NumPy加权平均报错:权重长度与指定轴不兼容问题求助
问题分析
报错ValueError: Length of weights not compatible with specified axis.的核心原因是:当使用np.average(arr, axis=1)时,权重数组w的长度必须与arr的列数匹配,而非行数。你当前w的长度是6398(和行数一致),但arr的列数显然不等于6398,因此维度不兼容。
解决步骤
1. 先确认数组维度
运行以下代码查看arr的形状:
print(arr.shape)
输出会是(6398, n_cols),其中n_cols是你的DataFrame的列数。再检查w的长度:
print(len(w))
两者必须相等才能用axis=1计算每行的加权平均。
2. 根据需求调整权重或参数
情况A:确实需要计算每行内元素的加权平均
- 如果你搞错了权重的维度:需要重新准备长度等于
n_cols的权重数组,对应DataFrame每一列的权重。比如你的DataFrame有10列,就需要长度为10的w,再运行原代码:Tdfp1['pbs_monitor_public'] = np.average(arr, axis=1, weights=w) - 如果你的
w本来就是要给每行赋予一个权重(而非列):那你可能误解了加权平均的逻辑。这种情况下,若要实现每行元素与对应权重的加权计算(比如加权求和后归一化),可以手动计算:# 假设arr是Tdfp1的数值数组,w是每行的权重 weighted_sum = (arr * w.reshape(-1, 1)).sum(axis=1) Tdfp1['pbs_monitor_public'] = weighted_sum / w.sum() # 按需选择是否归一化
情况B:实际需求是按列计算加权平均(用每行的权重)
如果你的目标是用每行的权重w计算每列的加权平均,并将结果作为新列重复到每行,可以这样做:
col_weighted_avg = np.average(arr, axis=0, weights=w) Tdfp1['pbs_monitor_public'] = col_weighted_avg # 会自动广播到每行
内容的提问来源于stack exchange,提问作者whSocks
相关产品推荐
相关产品推荐

