沿轴使用多维权重进行Numpy平均

5

我有一个numpy数组,aa.shape=(48,90,144)。我想要使用数组b中的权重沿着第一轴对a进行加权平均,b.shape=(90,144)。因此输出应该是一个形状为(48,)的numpy数组。

我知道可以用列表推导式来完成:

np.array([np.average(a[i], weights=b) for i in range(48)])

但我希望避免将列表转换为numpy数组。 有人可以帮忙吗? 我相信可以使用numpy函数和切片来解决,但我卡住了。谢谢!

2个回答

6
在一行代码中:
np.average(a.reshape(48, -1), weights=b.ravel()), axis=1)

你可以使用以下方法进行测试:
a = np.random.rand(48, 90, 144)
b = np.random.rand(90,144)
np.testing.assert_almost_equal(np.average(a.reshape(48, -1),
                                          weights=b.ravel(), axis=1),
                               np.array([np.average(a[i],
                                                    weights=b) for i in range(48)]))

0

这是我能想到的最快的方法:

(a * b).mean(-1).mean(-1) * (b.size / b.sum())

它可以适用于任何数量的源和结果维度。

重新塑形和1 x均值并没有进一步加速:

(a * b).reshape(len(a), -1).mean(-1) * (b.size / b.sum())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接