我在使用numpy广播时发现了一些奇怪的行为。问题如下所示,运行第一段代码将会产生一个错误:
A = np.ones((10))
B = np.ones((10, 4))
C = np.ones((10))
np.asarray([A, B, C])
ValueError: could not broadcast input array from shape (10,4) into shape (10)
如果我使用B = np.expand_dims(B, axis=0)
来扩展B的维度,它将成功创建数组,但它现在的维度是错误的(这并不令人意外):
array([array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]),
array([[[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]]]),
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])], dtype=float32)
为什么第一个示例无法广播,并且我如何得到像下面这样的数组(请注意,第二个数组周围只有双括号)?任何反馈都将不胜感激。
array([array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]),
array([[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]]),
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])], dtype=object)
np.hstack([A[:,None], B, C[:,None]])
的翻译是什么? - Divakar(10,6)
的数组(如上面的示例),而不是我需要的(3,)
或(1,3)
。 - andkirnp.array
进入错误的路径,试图创建一个大小为(10,?)的数组。请记住,np.array
的默认行为是创建多维(数值)数组。创建对象数组是一个后备选项。出现此错误时还有另一种可能性。 - hpaulj