我刚刚开始学习numpy一个经历了numpy的scipy教程。我的问题与广播何时发生有关。
正如tutorial中所建议的那样,如果两个数组遵循某些条件,则它们是兼容的,例如:
我的问题是,假设我有以下两个数组:
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)
当我用笔和纸图解地表示这两个数组时,我得到的操作无法执行,但我无法从上面提到的教程中看出,如何在数组上没有成功执行操作。请帮我理解。
我知道这是基本的东西,但这对我的理解很有帮助。
问候
答案 0 :(得分:7)
这是确定是否可以广播两个阵列的过程: 使用右对齐来对齐形状:
2 5
2 4 1
在左侧添加1,以便两个形状具有相同数量的轴(在下面显示为列):
1 2 5
2 4 1
现在比较一下列。要使广播正常工作,每列中的值必须相同,否则其中一个值必须等于1.
在第二列中,2不等于4,因此无法进行广播。 (在第一和第三列中,1& s使这些轴与广播兼容,但由于第二列,整个阵列不能播放。)