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

时间:2012-03-30 17:53:02

标签: 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。

如何为ab进行元素乘法呢?

2 个答案:

答案 0 :(得分:17)

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

a[:, 0] * b

a * b[:, None]

答案 1 :(得分:4)

b添加第二个轴ab具有相同的尺寸:

>>> a * b[:,np.newaxis]
array([[ 1.],
       [ 1.],
       [ 1.]])

或者,转置a以便广播有效:

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

(你可能想转置结果。)