与numpy相容的本征张量积

与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

在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, 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中实现这一点。哦,对不起,我误解了你的问题。我相信这个问题已经得到了回答。尽管如此,如果你问的是更普遍的宫缩(不仅仅是外型产品),那么请检查