首页 > 解决方案 > 一维数组和二维数组之间的numpy元素明智乘法背后的逻辑

问题描述

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

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

任何人都可以向我解释为什么如果我进行元素明智乘法的原因

c = a * b

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

标签: pythonarraysnumpy

解决方案


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

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

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

x+y

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

所以现在在你的情况下,你有这个自动广播a发生,这意味着你将 size 乘以 size (1,1000)(1000,1)它们都是通过第一个广播规则广播的,因此给出了 size 的结果(1000,1000)


推荐阅读