-1

我通过以下维度的两个数组的划分得到Numpy Operands could not be broadcast together with shape (200,1,25,25) (200,1) 错误

a=numpy.ones((200,1,25,25))
b=numpy.ones((200,1))
c=a/b

但我可以通过以下维度得到正确的结果

a=numpy.ones((4,1,4,4))
b=numpy.ones((4,1))
c=a/b

我该如何解决这个错误。我的 numpy 版本是 1.6.1。Python 的版本是 2.7。

4

1 回答 1

3

第二个例子没有做你认为它做的事情。Numpy 从右边开始匹配轴进行广播;(25, 25)在第一个示例中匹配(200, 1)到并无法广播,但(4, 4)匹配(4, 1)并成功广播。

将形状(200, 1, 25, 25)数组视为 25×25 数组的 200×1 数组。如果将其除以 25×25 数组,numpy 会将左操作数的每个 25×25 子数组除以右操作数。另一方面,尝试使用 200×1 的除数是没有意义的。这不是对广播规则的完整描述——如果这就是一切,第二个例子就不会运行——但它应该足以开始建立对事物如何工作的直觉。

您可能想要颠倒轴的顺序:

a = numpy.ones((25, 25, 1, 200))
b = numpy.ones((1, 200))

阅读有关广播语义的文档也可能会有所帮助。

于 2013-09-02T07:06:58.973 回答