Numpy:如何逐个乘以两个向量,shape(n,1)和(n,)?

Nic*_*mer 7 python arrays numpy

如果它们都具有相同的形状,例如两个(n,1)或两个(n,),则两个矢量的元素相乘是没有问题的.但是,如果一个向量具有形状(n,1)而另一个向量具有(n,),则*-operator返回一些有趣的东西.

a = np.ones((3,1))
b = np.ones((3,))
print a * b
Run Code Online (Sandbox Code Playgroud)

得到的nxn矩阵包含A_ {i,j} = a_i*b_j.

我怎样才能实现elementwise乘法的ab呢?

Sve*_*ach 17

以使形状匹配的方式切割向量:

a[:, 0] * b
Run Code Online (Sandbox Code Playgroud)

要么

a * b[:, None]
Run Code Online (Sandbox Code Playgroud)

  • `a.reshape(-1)*b`​​或`a*b.reshape(( - 1,1))`是另一种基本相同的方法.(`-1`表示"尽可能多地使其适合这种形状.") (2认同)