Numpy分区错误

时间:2013-09-02 06:57:50

标签: python numpy

我通过以下维度划分两个数组得到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。

1 个答案:

答案 0 :(得分:3)

第二个例子不符合你的想法。 Numpy从右边开始匹配广播的轴; (25, 25)在第一个示例中与(200, 1)匹配,但无法广播,但(4, 4)(4, 1)匹配并成功广播。

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

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

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

也可能有助于阅读广播语义的documentation