Python N维张量点等价于einsum

Python N维张量点等价于einsum,python,numpy,tensor,Python,Numpy,Tensor,我试图通过einsum找到一个张量,它等价于将两个等形状的N阶张量完全约化为一个标量。两个张量的阶数均为3。我想用tensordot实现这一点,因为我认为更容易扩展到更高的维度。以下是einsum高达4D的收缩图 val_1D=np.einsum('i,i',A,B)#1D(又名点积) val_2D=np.einsum('ij,ij',A,B)#2D val_3D=np.einsum('ijk,ijk',A,B)#3D val_4D=np.einsum('ijkl,ijkl',A,B)#4D

我试图通过einsum找到一个张量,它等价于将两个等形状的N阶张量完全约化为一个标量。两个张量的阶数均为3。我想用tensordot实现这一点,因为我认为更容易扩展到更高的维度。以下是einsum高达4D的收缩图

val_1D=np.einsum('i,i',A,B)#1D(又名点积)
val_2D=np.einsum('ij,ij',A,B)#2D
val_3D=np.einsum('ijk,ijk',A,B)#3D
val_4D=np.einsum('ijkl,ijkl',A,B)#4D

我需要一种方法来进行第N次收缩,而无需在代码中写出所有收缩,因为N可能相当大,并且有多个数组来执行此操作。据我所知,这应该是可能的。

因为您正在寻找标量输出,只需执行-
A.ravel().dot(B.ravel())
。Tensordot需要设置轴arg,因此没有多少额外步骤。完美。非常感谢。