我了解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
吗?
答案 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
使用您的x
和y
:
(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)
。