numpy广播

时间:2017-08-09 12:42:02

标签: python arrays numpy

我刚刚开始学习numpy一个经历了numpy的scipy教程。我的问题与广播何时发生有关。

正如tutorial中所建议的那样,如果两个数组遵循某些条件,则它们是兼容的,例如:

  1. 他们是平等的
  2. 其中一个是1
  3. 我的问题是,假设我有以下两个数组:

    import numpy as np
    
    c1 = np.arange(10).reshape(2,5)
    c2 = np.arange(8).reshape(2,4,1)
    c3 = c1-c2
    

    但是上面的操作给出了兼容/广播错误,如下所示:

    ValueError: operands could not be broadcast together with shapes (2,5) (2,4,1)
    

    当我用笔和纸图解地表示这两个数组时,我得到的操作无法执行,但我无法从上面提到的教程中看出,如何在数组上没有成功执行操作。请帮我理解。

    我知道这是基本的东西,但这对我的理解很有帮助。

    问候

1 个答案:

答案 0 :(得分:7)

这是确定是否可以广播两个阵列的过程: 使用右对齐来对齐形状:

  2 5
2 4 1

在左侧添加1,以便两个形状具有相同数量的轴(在下面显示为列):

1 2 5
2 4 1

现在比较一下列。要使广播正常工作,每列中的值必须相同,否则其中一个值必须等于1.

在第二列中,2不等于4,因此无法进行广播。 (在第一和第三列中,1& s使这些轴与广播兼容,但由于第二列,整个阵列不能播放。)