成对(值、权重)的平均值(单位:numpy)

2024-09-30 19:21:22 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我的输入数据是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]

Tags: 数据方法infornparray平均值values
1条回答
网友
1楼 · 发布于 2024-09-30 19:21:22

不要使用列表理解迭代器和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)

相关问题 更多 >