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