与numpy相容的本征张量积
在python numpy中,可以定义两个不同大小的多维张量并将它们相乘。例如,这里数组“a”的形状为(1,3),“b”的形状为(2,1)。产品形状为(2,3)。在张量积中,这是有意义的:c_ij=b_i a_j。在本征(A+C++库)中,虽然张量乘积形状相同,但在特征值中也可以这样做。与numpy相容的本征张量积,numpy,eigen,eigen3,Numpy,Eigen,Eigen3,在python numpy中,可以定义两个不同大小的多维张量并将它们相乘。例如,这里数组“a”的形状为(1,3),“b”的形状为(2,1)。产品形状为(2,3)。在张量积中,这是有意义的:c_ij=b_i a_j。在本征(A+C++库)中,虽然张量乘积形状相同,但在特征值中也可以这样做。 from numpy import array as arr a = arr([[1,2,3]]) b = arr([[5], [10]]) c = a * b # Outputs a array([[1, 2
from numpy import array as arr
a = arr([[1,2,3]])
b = arr([[5], [10]])
c = a * b
# Outputs
a
array([[1, 2, 3]])
b
array([[ 5],
[10]])
c
array([[ 5, 10, 15],
[10, 20, 30]])
只需使用
@
操作符即可-
b@a
您还可以执行np.matmul(b,a)
对于具有更多维度的数组,可以使用einsum
。在这种情况下,np.einsum(“ij,ai->aj”,a,b)
将给出您期望的结果
还有另一种方法-np.tensordot(a,b,axes=((0),(1)).T
最后两种方法在处理大规模多维阵列时非常有用。谢谢,但问题是如何在Eigen而不是numpy中实现这一点。哦,对不起,我误解了你的问题。我相信这个问题已经得到了回答。尽管如此,如果你问的是更普遍的宫缩(不仅仅是外型产品),那么请检查