【问题标题】:Numpy Broadcasting arraysNumpy 广播数组
【发布时间】:2014-03-03 19:59:02
【问题描述】:

当我试图理解 python 中的广播时,我遇到了形状不匹配错误。我知道这意味着我拥有的数组不适合维度。我的代码基本上尝试对具有以下维度的数组执行以下操作:

(256,256,3)*(256,256)+(256,256)

我知道问题出在乘法上。我想知道有没有办法解决这个问题?我可以在乘法的 (256,256) 数组中添加一个额外的维度吗?

【问题讨论】:

  • 您可以使用numpy.newaxis添加新维度
  • 在此处查看文档和示例:docs.scipy.org/doc/numpy/reference/…
  • 您可以通过点击答案分数下方的勾号图标来接受答案。

标签: python arrays numpy


【解决方案1】:

我们说

A.shape = (256,256,3)
B.shape = (256,256)
C.shape = (256,256)

NumPy broadcasting 默认在 left 上添加坐标轴,所以 这将导致BC 被广播到

B.shape = (256,256,256)
C.shape = (256,256,256)

显然这不起作用,也不是您想要的,因为与 A 的形状不匹配。

所以当你想在右边添加一个轴时,使用B[..., np.newaxis]C[..., np.newaxis]

A*B[..., np.newaxis] + C[..., np.newaxis]

B[..., np.newaxis] 的形状为(256,256,1),当与A 相乘时会广播到(256,256,3)C[..., np.newaxis] 也是如此。


B[..., np.newaxis]也可以写成B[..., None]——因为np.newaxisNone。它有点短,但意图可能不是很清楚。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多