Python Numpy:如何将两个向量,形状(n,1)和(n,)元素相乘?

Python Numpy:如何将两个向量,形状(n,1)和(n,)元素相乘?,python,arrays,numpy,Python,Arrays,Numpy,如果两个向量都有相同的形状,比如二者(n,1)或二者(n,)的话,两个向量的元素相乘就没有问题。但是,如果一个向量具有形状(n,1)而另一个向量具有形状(n,),则*-运算符返回有趣的结果 a = np.ones((3,1)) b = np.ones((3,)) print a * b 得到的nxn矩阵包含A_{i,j}=A_i*b_j 如何对a和b执行元素乘法?以使向量形状匹配的方式切片向量: a[:, 0] * b 或 向b添加第二个轴,使a和b具有相同的尺寸: >>>

如果两个向量都有相同的形状,比如二者(n,1)或二者(n,)的话,两个向量的元素相乘就没有问题。但是,如果一个向量具有形状(n,1)而另一个向量具有形状(n,),则
*
-运算符返回有趣的结果

a = np.ones((3,1))
b = np.ones((3,))
print a * b
得到的nxn矩阵包含A_{i,j}=A_i*b_j


如何对
a
b
执行元素乘法?

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

a[:, 0] * b


b
添加第二个轴,使
a
b
具有相同的尺寸:

>>> a * b[:,np.newaxis]
array([[ 1.],
       [ 1.],
       [ 1.]])
或者,将
a
转置,以便广播工作:

>>> a.T * b
array([[ 1.,  1.,  1.]])

(你可能想转置结果。)

a.重塑(-1)*b
a*b.重塑(-1,1))
是做基本相同事情的另一种方法。(
-1
的意思是“尽可能多地使它适合这个形状。”)我认为
.T
解决方案是最好的。它需要最少的打字和最少的思考。
>>> a.T * b
array([[ 1.,  1.,  1.]])