我有一个形状为 (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 contiguous,但我仍然得到相同的 r 形状 (1,3,64,3)。
有人知道如何写出正确的表达方式吗?
最佳答案
作为替代解决方案,如果您使用 einsum
,您可以避免为点积 reshape 数组:
np.einsum('ij,jk->kij', vector_a, vector_b)
关于python - 如何在范围内为 i 向量化 np.dot(vector_a, vector_b[ :, i]) ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34138340/