我有两个数组a和b,a的形状为(1000,),b的形状为(1000,1)
a = np.sin(x)
b = np.cos(x[:, np.newaxis])
有人可以向我解释为什么我要进行元素明智的乘法
c = a * b
我知道c的形状为(1000,1000)? 非常感谢您的帮助。
答案 0 :(得分:2)
numpy具有广播的概念。这意味着如果一个轴的形状为1,则它可以匹配另一个具有不同大小的数组,并且该轴的元素将广播到另一个数组的所有元素。
当您这样做时会发生什么:
x = np.zeros((1,))
y = np.zeros((100,))
x+y
现在,还有自动广播的概念。这意味着(n,)
的形状也可以理解为(1,n)
。
因此,在您的情况下,您正在发生a
的这种自动广播,这意味着您要将(1,1000)
的大小乘以(1000,1)
的大小,这两个都是通过第一个广播规则进行广播的,因此得出大小为(1000,1000)
的结果。