找出numpy的广播形状

时间:2018-11-26 05:59:26

标签: python numpy numpy-broadcasting

我了解numpy(熊猫)广播的基本知识,但被这个简单的例子所困扰:

x = np.arange(5) 
y = np.random.uniform(size = (2,5)) 
z = x*y 
print(z.shape) #(2,5) 

我对z形状的理解是,您有一个(1,5)数组乘以(2,5)数组,尾随尺寸5相等,因此最终得到一个2x5数组。好吧,听起来不错。我的问题是为什么x.shape = (5,)?它不是一维的,所以真的是1x5吗?

2 个答案:

答案 0 :(得分:1)

NumPy这样的1D数组,例如x,可以使您像(5,)这样的形状而无需重塑形状。如果要将其视为形状为1x5的1列矩阵,请执行np.arange(5).reshape(1,5)

答案 1 :(得分:1)

广播规则是:

Add leading singleton dimensions as needed to match number of dimensions
Scale any singleton dimensions to match dimension values
Raise error dimensions can't be matched

使用您的xy

(5,) * (2,5)
(1,5) * (2,5)          # add the leading 1
(2,5) * (2,5)          # scale the 1
=> (2,5)

如果y为(5,2),则将引发错误,因为(1,5)无法与(5,2)配对。但是(5,1)可以,因为(1,5) * (5,1) => (5,5)