NumPy加权平均值关于权重长度的误差

ca1c2owp  于 2023-10-19  发布在  其他
关注(0)|答案(2)|浏览(117)

我有一个长度为(6398)的一维权重数组和一个6398行的数组。我试图计算每行的加权平均值,并将其放入到新的列中。但我得到这个错误消息:

ValueError: Length of weights not compatible with specified axis.

这是没有意义的,因为看起来行/列是匹配的。这是一个简单的例子。

Tdfp1['pbs_monitor_public'] = np.average(arr, axis=1, weights=w)

我想我会在数据框的末尾有一个新列,它的行数与加权平均值的其余部分相同。

r9f1avp5

r9f1avp51#

从文档中可以看到,权重的维度应该与计算平均值的轴的维度相匹配,或者应该与输入矩阵的维度相同。
weights:array_like,可选
中的值关联的权重数组。a中的每个值根据其相关权重对平均值做出贡献。权重数组可以是一维的(在这种情况下,它的长度必须是沿给定轴的沿着的大小),也可以是与相同形状的。如果weights=None,则假设a中的所有数据都具有等于1的权重。一维计算为:
avg = sum(a * weights)/ sum(weights)
所以我认为问题在于你的体重“w”的尺寸。下面是一个例子,我试过,为我工作。

import numpy as np
arr = np.array([[10,11,12,13,14,15]])
arr_shape = arr.shape[1] # just to get the shape for creating Weight array.
w=5 # Sample value as weight , this you can changed according to your logic.
w_array = np.array([w]*arr_shape) # weight array created.
print("Input array shape:" , arr.shape)
print("Weight array shape:" ,w_array.shape)
avg = np.average(arr, axis=1, weights=w_array)
print("Average : " , avg)
  • 输出
Input array shape: (1, 6)
Weight array shape: (6,)
Average :  [12.5]
kse8i1jr

kse8i1jr2#

我将假设您正在尝试计算一些列的加权平均值以创建一个新列。我创建了一个类似这样的示例框架:

import pandas as pd
import numpy as np

N = 6398
Tdfp1 = pd.DataFrame({f'c{i}': np.random.rand(N) for i in range(3)})

现在,让我们指定列及其关联的权重。请注意,重要的是权重与列一样多。

columns = ['c0', 'c1', 'c2']
w = [1, 2, 3]

assert(len(columns) == len(w))

我假设你是这样处理arr中的列的:

arr = Tdfp1[columns].values

现在,维度是有意义的,所以这是正确的:

Tdfp1['pbs_monitor_public'] = np.average(arr, axis=1, weights=w)

相关问题