首页 > 解决方案 > Numpy 不一起广播兼容的形状

问题描述

以下代码在 Python 3.8.3 中给我一个错误:

import numpy as np
a = np.random.rand(10, 5, 2)
b = np.random.rand(10, 5)
c = a/b

有错误

ValueError: operands could not be broadcast together with shapes (10,5,2) (10,5) 

但这两种形状应该是兼容的吧?我可以通过使用 b[:, :, None] 来使除法工作,但是广播中的 Numpy 页面没有任何迹象表明这种额外的语法是必要的。也许我快疯了,但我可以发誓我以前写过这样的代码并且没有任何错误。我在这里想念什么?

标签: pythonpython-3.xnumpy

解决方案


Numpy(自动)向左广播但不向右广播。这就是您的代码出错的原因

import numpy as np
a = np.random.rand(10, 5, 2)
b = np.random.rand(10, 5)
c = a / b  # gives error

虽然这段代码有效

import numpy as np
a = np.random.rand(10, 5, 2)
b = np.random.rand(5, 2)
c = a / b
print('shape of c', c.shape)

这使

shape of c (10, 5, 2)

因此,请使用建议的解决方案或替代方案之一:

a = np.random.rand(10, 5, 2)
b = np.random.rand(10, 5)
c = a / b[..., None]
c = a / b[..., np.newaxis]
c = a / b[:, :, None]
c = a / b[:, :, np.newaxis]

推荐阅读