给定一个张量(即矩阵的集合)和一个张量(即向量的集合长度 ) 我想使用 Numpy 计算张量其中每个元素都是矩阵向量积
我找到了一种方法来做到这一点,numpy.einsum
但很好奇是否有另一种方法可以做到这一点,或者这个操作是否有一个特定的名称?如果有替代方案,该替代方案的性能与 using 相比如何einsum
?
下面是一个例子:
from numpy import dot, einsum, zeros_like
from numpy.linalg import norm
from numpy.random import randn
n = 10
g = 4
matrices = randn(n,n,g,g)
vectors = randn(n,n,g)
# "manual" mat-vec multiplication (slow)
out1 = zeros_like(vectors)
for i in range(n):
for j in range(n):
out1[i,j] = dot(matrices[i,j], vectors[i,j])
# using numpy.ensum (faster)
out2 = zeros_like(vectors)
out2 = einsum('...ij,...j->...i', matrices, vectors)
numpy.isclose(out1, out2).all() # outputs `True`