4

我有一个 numpy 数组,a, a.shape=(48,90,144)。我想使用数组,a中的权重沿第一个轴取加权平均值。所以输出应该是一个 numpy 的 shape 数组。bb.shape=(90,144)(48,)

我知道这可以通过列表理解来完成:

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

但我想避免必须从列表转换回 numpy 数组。

任何人都可以帮忙吗?我确信使用 numpy 函数和切片是可能的,但我被卡住了。谢谢!

4

2 回答 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)]))
于 2013-01-24T18:54:51.673 回答
0

那是我能想到的禁食:

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

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

Reshape 和 1 x mean 没有进一步加速:

(a * b).reshape(len(a), -1).mean(-1) * (b.size / b.sum())
于 2016-08-25T13:21:39.597 回答