我有一个数值数组,a,a.shape=(48,90,144)。我想使用数组b,b.shape=(90,144)中的权重沿着第一个轴获得a的加权平均值。因此,输出应该是形状为(48,)的numpy数组。
我知道这可以通过列表理解来完成:
np.array([np.average(a[i], weights=b) for i in range(48)])但我希望避免从列表转换回numpy数组。
有人能帮上忙吗?我确信使用numpy函数和切片可以做到这一点,但是我被卡住了。谢谢!
发布于 2013-01-25 02:54:52
在一行中:
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)]))发布于 2016-08-25 21:21:40
这就是我能想到的绝食:
(a * b).mean(-1).mean(-1) * (b.size / b.sum())它可以适用于任意数量的源维度和结果维度。
重塑和1 x均值没有进一步加速:
(a * b).reshape(len(a), -1).mean(-1) * (b.size / b.sum())https://stackoverflow.com/questions/14508570
复制相似问题