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])]
以及我想构建成对的 values
和 weights
有序条目,然后计算平均值(我希望从我下面的尝试中可以清楚地看出这一点)。
这是我想出来的,但感觉有一种更简洁的方法来实现结果:
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)
假设我的输入数据格式为 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])]
以及我想构建成对的 values
和 weights
有序条目,然后计算平均值(我希望从我下面的尝试中可以清楚地看出这一点)。
这是我想出来的,但感觉有一种更简洁的方法来实现结果:
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)