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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 19:57:25