[英]Matrix-vector-multiplication with tensors in numpy
我有一个形状为(l,l)
的 numpy.array A
和另一个形状为(l,m,n)
numpy.array B
。 通常, B
的第二个和第三个维度对应于空间单元,而第一个维度对应于其他东西。
我想计算
l,m,n = 2,3,4 # dummy dimensions
A = np.random.rand(l,l) # dummy data
B = np.random.rand(l,m,n) # dummy data
C = np.zeros((l,m,n))
for i in range(m):
for j in range(n):
C[:,i,j] = A@B[:,i,j]
即,在每个空间单元格中,我想执行矩阵向量乘法。 由于我必须经常这样做,我想知道是否有更紧凑的方法来编写numpy
。 (特别是因为有几种情况,张量具有形状(l,m,n,o,p)
。)
先感谢您!
我使用np.einsum
找到了答案:
np.einsum('ij,jkl->ikl', A,B)
解释:爱因斯坦符号意味着我们对匹配的下标求和。
np.einsum('ij,jkl->ikl', A,B)
= rewritten in math terms
A_{i,j} B_{j,k,l}
= Einstein notation implies summation
sum_j A_{i,j} B_{j,k,l}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.