一维数组和二维数组之间的numpy元素明智乘法背后的逻辑

时间:2018-11-22 09:51:40

标签: python arrays numpy

我有两个数组a和b,a的形状为(1000,),b的形状为(1000,1)

a = np.sin(x) 
b = np.cos(x[:, np.newaxis])

有人可以向我解释为什么我要进行元素明智的乘法

c = a * b

我知道c的形状为(1000,1000)? 非常感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

numpy具有广播的概念。这意味着如果一个轴的形状为1,则它可以匹配另一个具有不同大小的数组,并且该轴的元素将广播到另一个数组的所有元素。

当您这样做时会发生什么:

x = np.zeros((1,))
y = np.zeros((100,))

x+y

现在,还有自动广播的概念。这意味着(n,)的形状也可以理解为(1,n)

因此,在您的情况下,您正在发生a的这种自动广播,这意味着您要将(1,1000)的大小乘以(1000,1)的大小,这两个都是通过第一个广播规则进行广播的,因此得出大小为(1000,1000)的结果。