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

时间:2015-12-07 16:24:26

标签: python arrays numpy vectorization dot-product

我有一个形状为(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)。

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

2 个答案:

答案 0 :(得分:4)

作为替代解决方案,如果您使用einsum,则可以避免为点积重新整形数组:

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

答案 1 :(得分:2)

此处使用broadcastingndarray.T -

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