广播在numpy

Pik*_*Dey 2 python arrays numpy

我刚开始学习numpy了解numpy的scipy教程.我的问题与广播何时发生有关.

如本教程中所建议的,如果两个数组遵循某些条件,则它们是兼容的,例如:

  1. 他们是平等的
  2. 其中一个是1

我的问题是,假设我有以下两个数组:

import numpy as np

c1 = np.arange(10).reshape(2,5)
c2 = np.arange(8).reshape(2,4,1)
c3 = c1-c2
Run Code Online (Sandbox Code Playgroud)

但上面的操作给我兼容/广播错误如下:

ValueError: operands could not be broadcast together with shapes (2,5) (2,4,1)
Run Code Online (Sandbox Code Playgroud)

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

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

问候

unu*_*tbu 8

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

  2 5
2 4 1
Run Code Online (Sandbox Code Playgroud)

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

1 2 5
2 4 1
Run Code Online (Sandbox Code Playgroud)

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

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