Python 如何将两个列表的矩阵乘以张量?

Python 如何将两个列表的矩阵乘以张量?,python,arrays,numpy,matrix,Python,Arrays,Numpy,Matrix,我有两个数组列表 splocations = [array([1,2,3]),array([4,5,6]),array([7,8,9])] eviddisp = [array([10,11,12]), array([13,14,15])] 我想把它们相乘,这样我就可以把数组中的每个列表元素相乘。这里我会得到一个3x2矩阵,其中每个元素都是一个向量。所以矩阵元素[0,0]是 array([10, 22, 36]) = array([1,2,3]) * array([10,11,12]) 所以这

我有两个数组列表

splocations = [array([1,2,3]),array([4,5,6]),array([7,8,9])]
eviddisp = [array([10,11,12]), array([13,14,15])]
我想把它们相乘,这样我就可以把数组中的每个列表元素相乘。这里我会得到一个3x2矩阵,其中每个元素都是一个向量。所以矩阵元素[0,0]是

array([10, 22, 36]) = array([1,2,3]) * array([10,11,12])
所以这个矩阵实际上是一个3x2x3形状的张量。如何得到这个张量/矩阵


我知道我需要以某种方式使用arraysplocations和ArrayVidDisp。我意识到,我正在用numpy的tensordot寻找一个解决方案,但我没有弄对。如何继续?

考虑到自动广播,我想这就是您想要的:

from numpy import array

splocations = [array([1,2,3]),array([4,5,6]),array([7,8,9])]
eviddisp = [array([10,11,12]), array([13,14,15])]

splocations = array(splocations)
viddisp = array(eviddisp)

result = splocations[:, None, :]*eviddisp

result

array([[[ 10,  22,  36],
        [ 13,  28,  45]],

       [[ 40,  55,  72],
        [ 52,  70,  90]],

       [[ 70,  88, 108],
        [ 91, 112, 135]]])

[splocations[i]*eviddisp[i]为我在range2中的位置]?@Divakar:这是非常低效的。我正在寻找一个简单的解决方案。a[:2]*b,其中a和b分别作为arraysplocations和ArrayVidDisp?@Divakar:这会产生一个3x2的矩阵,而不是要求的张量。然后,尝试a[:,None]*b。您可以使用等效但更简洁的语法:splocations=np.array[[1,2,3],[4,5,6],[7,8,9]]。还要注意的是,在乘法步骤中,您可以不使用final:来执行相同的操作,正如@Divakar在注释中所示。我同意直接创建更好,但也许他真的有一个数组列表。我还喜欢显式地指定所有索引。很明显,结果是三维的,有时我甚至会写a[:,None,:]*b[None,:,:]来突出显示维度对。