Figuring out broadcasting shape in numpy

守給你的承諾、 提交于 2019-12-11 08:57:25

问题


I understand the basics of numpy (Pandas) broadcasting but got stuck on this simple example:

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

My understanding of the z shape is that you had a (1,5) array multiplied with a (2,5) array, the trailing dimension for 5 is equal so you end up with a 2x5 array. Okay that sounds good. My problem is why is x.shape = (5,)? Isn't it one-dimensional so it's really 1x5?


回答1:


NumPy 1D array like x gives you shape such as (5,) without reshaping. If you want to treat it as 1 column matrix of shape 1x5 then do np.arange(5).reshape(1,5)




回答2:


The broadcasting rules are:

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

With your x and y:

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

If y was (5,2), it would raise an error, because (1,5) cannot be paired with (5,2). But (5,1) is ok, because (1,5) * (5,1) => (5,5).



来源:https://stackoverflow.com/questions/53475472/figuring-out-broadcasting-shape-in-numpy

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!