如何使用矩阵数组和向量数组(numpy)执行正确的矩阵向量

  • 本文关键字:数组 向量 执行 numpy 何使用 numpy
  • 更新时间 :
  • 英文 :


我一直在努力寻找解决方案,但似乎找不到。

在不使用for循环的情况下,我想执行矩阵向量乘法。

设A是N-m-N矩阵阵列,设B是N-N向量阵列

代码等效为:

# create a Nxn matrix as the output
C = np.zeros(N, n)
for N in range(A.shape[0]):
C[N] =A[N] @ B[N]

简单地做A @ B的问题是numpy假设B是矩阵,而不是广播矩阵向量积。同样,这是矩阵N和向量N的列空间中的矩阵乘法。

我试着寻找np.einsum和np.tensordot解决方案,但似乎找不到。

np.einsum应该可以解决您的问题。如果有矩阵mxn的N阵列A和向量nx1的N阵列,则C应该是向量mx1的N阵列。那么,使用np.einsum将是获得正确索引的问题。

例如,给定

# these values are illustrative
N, m, n = 4, 5, 3 
A = np.random.randint(10, 100, (N, m, n))
B = np.random.randint(5, 10, (N, n))

您的代码

C = np.empty((N, m)) # notice the dimension here is different from your code
for i in range(A.shape[0]):
C[i] = A[i] @ B[i]

可以使用np.einsum通过将维度映射到正确的索引来重写,如@hpaulj
NxmxnNxn->Nxm
i j ki k->i j

C = np.einsum("ijk,ik->ij", A, B)

有关如何使用np.einsum的更多信息,您可以在这个链接中找到一个很好的解释。

最新更新