numpy鸿沟的问题

时间:2015-01-08 14:16:43

标签: python arrays numpy

我正在尝试使用numpy divide来对数组执行除法,我有两个数组,我按如下方式调用它:

log_norm_images = np.divide(diff_images, b_0)

我收到错误:

operands could not be broadcast together with shapes (96,96,55,64) (96,96,55).

这些分别是ndarrays的形状。

现在,在我的python shell中,我进行了以下测试:

 x = np.random.rand((100, 100, 100))
 y = np.random.rand((100, 100))

np.divide(x, y)

运行没有任何错误。我不知道为什么会这样,而不是我的情况。

1 个答案:

答案 0 :(得分:3)

您正在尝试使用3-D阵列广播4-D阵列。根据NumPy的广播行为,只有在每个相应的维度,维度相等或其中一个为1时,这才会成功。这就是为什么它不匹配:

Your 4-D array:  96 x 96 x 55 x 64
Your 3-D array:       96 x 96 x 55
                           ^     ^
                           Mismatching dimensions

如果您的打击垫输出/重塑您的3-D阵列(我不再认为是3-D)以明确具有形状(96,96,55,1),则您的操作可能会起作用。然后它看起来像:

Your 4-D array:  96 x 96 x 55 x 64
Your 3-D array:  96 x 96 x 55 x 1
                                 ^
                                This is acceptable for the broadcast behavior

此SciPy / NumPy文档的链接更详细地介绍了这一点:

http://docs.scipy.org/doc/numpy/user/basics.broadcasting.html