![](/img/trans.png)
[英]Using numpy einsum to compute inner product of column-vectors of a matrix
[英]List of vectors multiplied by one matrix with numpy einsum
我有一个3x3的矩阵,我想将此列表中的每个向量相乘。
这可以通过循环轻松完成:
import numpy as np
a = np.array([[0,1,0],[-1,0,0],[0,0,1]])
b = np.array([[1,2,3],[4,5,6]])
for elem in b:
print(a.dot(elem))
为了使其更快,我尝试使用numpy.einsum,但我无法执行正确的公式。
我已经尝试过np.einsum('ij,ji->ij', a, b)
但这导致ValueError: operands could not be broadcast together with remapped shapes [original->remapped]: (3,3)->(3,3) (2,3)->(3,2)
有什么建议吗?
In [489]: for elem in b:
...: print(a.dot(elem))
...:
[ 2 -1 3]
[ 5 -4 6]
第一步-您正在迭代b
的第一个维度,并期望在结果中也是如此:
np.einsum(',i->i', a, b)
dot
a
的最后a
暗角与elem的唯一一个暗角, b
的第二个暗角配对-并将它们相加:
np.einsum(' j,ij->i', a, b)
现在填写a
的第一个维度,该维度作为结果的最后一个模糊点通过:
In [495]: np.einsum('kj,ij->ik', a, b)
Out[495]:
array([[ 2, -1, 3],
[ 5, -4, 6]])
切换参数,然后出现常规的二维点积:
In [496]: np.einsum('ij,kj->ik', b, a)
Out[496]:
array([[ 2, -1, 3],
[ 5, -4, 6]])
In [497]: b.dot(a.T) # b@(a.T)
Out[497]:
array([[ 2, -1, 3],
[ 5, -4, 6]])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.