【发布时间】:2017-01-08 08:20:58
【问题描述】:
我有一个 NumPy ndarray,它的形状为 (32, 1024) 并保存 32 个信号测量值,我想将它们组合成一个 1024 个元素长的阵列,每个 32 个元素的权重不同。我正在使用numpy.average 但我的权重很复杂,average 根据总和对权重进行归一化,这会影响我的结果。
查看平均值的代码,我意识到我可以通过将权重乘以信号数组然后在第一个轴上求和来完成同样的事情。但是,当我尝试将我的 (32,) 权重数组乘以 (32, 1024) 信号数组时,我得到一个维度不匹配,因为 (32,) 无法广播到 (32, 1024)。如果我将权重数组重塑为 (32, 1),那么一切都会按预期工作,但这会导致代码相当难看:
avg = (weights.reshape((32, 1)) * data).sum(axis=0)
谁能解释为什么 NumPy 不允许我的 (32,) 数组广播到 (32, 1024) 和/或建议一种替代的、更简洁的方法来执行加权平均?
【问题讨论】:
-
numpy 可以将 (32,) 扩展到
(1, 32)到(1024,32);但是您必须授予它将(32,)扩展为(32,1)的权限。这避免了在其他情况下的歧义,例如,在将 (32,) 与 (1024,) 相乘时。在我最近的回答中了解更多信息,stackoverflow.com/a/39238203/901925
标签: python numpy multidimensional-array array-broadcasting