要得到预期结果,你需要利用 numpy 的广播机制来创建一个新的维度:
>>> a * b
array([[1, 2, 3]])
>>> a[:, None] * b
array([[1],
[2],
[3]])
>>> a.shape
(3,)
>>> a[:, None].shape
(3, 1)
这样做的原因是将一维数组 a
转换为 (3, 1) 形状的二维数组,从而可以与形状为 (1, 3) 的数组 b
进行元素对齐相乘。
另外,你也可以使用 numpy.einsum
函数:
>>> np.einsum('i,jk->ik', a, b)
array([[1],
[2],
[3]])