如何对范围内的i矢量化np.dot(vector_a,vector_b[:,i])



我有一个形状为(3,1)的numpy数组vector_a。如果我把它与形状(1,3)的向量b相乘,我得到形状(3,3)的结果。

现在,vector_b实际上是列向量的(3,N)numpy数组。我想将这些列向量中的每一个乘以vector_a,以产生N3x3矩阵,即形状(N,3,3)的结果

我做了以下工作:

r = np.dot(vector_a.reshape(1,3,1), vector_b.T.reshape(N, 1, 3))

我原以为r的形状是(N,3,3),但我得到了(1,3,64,3)的形状???我不知道为什么我会变成这样。vector_a和vector_b都是C连续的。在做vector_b.T.reshape(N, 1, 3)之前,我试图将vector_b转换为F连续,但我仍然得到了相同的r形状(1,3,64,3)。

有人知道如何写出正确的表达方式吗?

作为一种替代解决方案,如果使用einsum,则可以避免为点积重塑阵列:

np.einsum('ij,jk->kij', vector_a, vector_b)

这里有一个使用broadcastingndarray.T

vector_b.T[:,None,:]*vector_a

最新更新