关键是将大小为 (3,) 的向量重塑为 (3,1):将每一行除以一个元素或 (1,3):将每一列除以一个元素。由于 data.shape 不对应于 vector.shape,NumPy 会自动将 vector 的形状扩展为 (3,3) 并按元素执行除法。
In[1]: data/vector.reshape(-1,1)
Out[1]:
array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
In[2]: data/vector.reshape(1,-1)
Out[2]:
array([[1. , 0.5 , 0.33333333],
[2. , 1. , 0.66666667],
[3. , 1.5 , 1. ]])
相似的:
x = np.arange(9).reshape(3,3)
x
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
x/np.sum(x, axis=0, keepdims=True)
array([[0. , 0.08333333, 0.13333333],
[0.33333333, 0.33333333, 0.33333333],
[0.66666667, 0.58333333, 0.53333333]])
x/np.sum(x, axis=1, keepdims=True)
array([[0. , 0.33333333, 0.66666667],
[0.25 , 0.33333333, 0.41666667],
[0.28571429, 0.33333333, 0.38095238]])
print(np.sum(x, axis=0).shape)
print(np.sum(x, axis=1).shape)
print(np.sum(x, axis=0, keepdims=True).shape)
print(np.sum(x, axis=1, keepdims=True).shape)
(3,)
(3,)
(1, 3)
(3, 1)