我有一个形状为(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)
这里有一个使用broadcasting
和ndarray.T
的
vector_b.T[:,None,:]*vector_a