我有一个形状为(3,1)的numpy数组“vector_a”。如果我用一个形状为(1,3)的向量“vector_b”与它相乘,我会得到一个形状为(3,3)的结果。
现在,“vector_b”实际上是一个列向量的numpy数组,形状为(3,N)。我想将这些列向量中的每一个都与“vector_a”相乘,以产生N个形状为(3,3)的矩阵,结果形状为(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
表达式没有求和任何东西。它可以通过简单的乘法(和广播)b.T[:,:,None] * a.T[None,:,:]
来完成。 - hpaulj