我有一个形状为(3,1)的numpy数组vector_a。如果我将它与形状(1,3)的vector_b相乘,我得到一个形状(3,3)的结果。
现在,vector_b实际上是一个(3,N)numpy列向量的数组。我想将这些列向量中的每一个乘以vector_a以生成N 3x3矩阵,形状结果(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)。
有人知道如何写出正确的表达方式吗?
答案 0 :(得分:4)
作为替代解决方案,如果您使用einsum
,则可以避免为点积重新整形数组:
np.einsum('ij,jk->kij', vector_a, vector_b)
答案 1 :(得分:2)
此处使用broadcasting
和ndarray.T
-
vector_b.T[:,None,:]*vector_a