numpy 中对(值、权重)的平均值

Average of pairs (values, weights) in numpy

假设我的输入数据格式为 array = [values, weights]

arr1 = [np.array([1,2,3,4]), np.array([1,1,1,1])]
arr2 = [np.array([2,4,6,8]), np.array([2,2,2,2])]

以及我想构建成对的 valuesweights 有序条目,然后计算平均值(我希望从我下面的尝试中可以清楚地看出这一点)。

这是我想出来的,但感觉有一种更简洁的方法来实现结果:

listArrs = [arr1, arr2]

vals = np.array([c[0] for c in listArrs]).T
weights = np.array([c[1] for c in listArrs]).T

[np.average(v,weights=w) for v,w in zip(vals, weights)]

Out: [1.6666666666666667, 3.3333333333333335, 5.0, 6.666666666666667]

不用列表理解迭代器和 zip,只需这样做 -

np.average(vals, weights=weights, axis=1)
array([1.66666667, 3.33333333, 5.        , 6.66666667])

Numpy 实现了出色的矢量化和广播,因此在处理矩阵或张量时很少需要迭代器。

这是一个没有任何迭代器的解决方案

listArrs = np.array([arr1, arr2])
vals = listArrs[:,0]  #Slice the values
weights = listArrs[:,1]   #Slice the weights
np.average(vals, weights=weights, axis=0)  #Apply a weighted np.average on 2 - 2d arrays
array([1.66666667, 3.33333333, 5.        , 6.66666667])

您推荐的一个衬垫 -

np.average(listArrs[:,0], weights= listArrs[:,1], axis=0)