首页 > 解决方案 > 寻找在 numpy 中做一系列矩阵向量产品的“正确”方法

问题描述

我有一个 3Dnumpy数组vecsvecs有形状[M,N,3]。也就是说,vecs是 3 元素向量的 MxN 集合。我正在寻找一种 pythonic (numpythonic?) 方法来获取每个向量与单个 3x3 矩阵的矩阵乘积mat。换句话说,我想要一种干净的方式来做到这一点:

>>>    for k in range(vecs.shape[0]):
>>>        for j in range(vecs.shape[1]):
>>>            vecs[k,j] = np.dot(mat, vecs[k,j])

有什么办法可以做到这一点?

标签: pythonarraysnumpy

解决方案


您的dot, 可以表示einsum为:

res[k,j,:] = np.einsum('ab,b->a',mat,vecs[k,j,:])

并概括为与整个数组一起工作

res = np.einsum('ab,kjb->kja',mat,vecs)

推荐阅读