如何在纯python中执行2个矩阵的张量积

如何在纯python中执行2个矩阵的张量积,python,linear-algebra,Python,Linear Algebra,我希望用纯python来表示np.kron函数正在做什么 假设我有以下列表: v1 = [1, 0, 0, 1] v2 = [1, 0, 0, 1] 我想定义一个函数,通过将v1乘以v2中的每个元素来创建列表列表。因此,这两个列表将生成4个列表: [[1 * v1[0]],[0 * v1[1]],[ * v1[3]],[1 * v1[3]]] 目前,我一直在乱搞一堆东西。但它无法工作。例如,当我运行此代码时,我得到一个4x2矩阵: i = [[a*b for a in eye] for b

我希望用纯python来表示np.kron函数正在做什么

假设我有以下列表:

v1 =  [1, 0, 0, 1]
v2 = [1, 0, 0, 1]
我想定义一个函数,通过将v1乘以v2中的每个元素来创建列表列表。因此,这两个列表将生成4个列表:

[[1 * v1[0]],[0 * v1[1]],[ * v1[3]],[1 * v1[3]]]
目前,我一直在乱搞一堆东西。但它无法工作。例如,当我运行此代码时,我得到一个4x2矩阵:

i = [[a*b for a in eye] for b in eye2]

>>[[1, 0, 0, 1], [0, 0, 0, 0], [0, 0, 0, 0], [1, 0, 0, 1]]

当我转换为np.array并重新格式化它时,它看起来不太正确:

print(np.array(i).reshape(4,4))

[[1 0 0 1]
 [0 0 0 0]
 [0 0 0 0]
 [1 0 0 1]]
如果通过np.kron(v1,v2),它将给出:

[[1 0 0 0]
 [0 1 0 0]
 [0 0 1 0]
 [0 0 0 1]]

这是一个漂亮的4x4单位矩阵;这就是我要找的。

您需要检查计算是否按照正确的顺序进行,如图所示。请记住,这是kronecker积,而不是张量积,因为这是您在问题描述中所述的,而不是标题


kron函数使用kronecker产品作为代码来实现kronecker产品。您能否为图像提供一个不透明的背景,使其在黑暗模式下工作?没问题,谢谢您更新图像,使每个人都能更容易地访问它!
import numpy as np

v1 = [1, 0, 0, 1]
v2 = [1, 0, 0, 1]

v1 = np.array(v1).reshape(2, 2)
v2 = np.array(v2).reshape(2, 2)

i = [[num1 * num2 for num1 in elem1 for num2 in v2[row]] for elem1 in v1 for row in range(len(v2))]

print(' ')

print("With list comprehension: ")
print(np.array(i).reshape(4, 4))

print(' ')

print("With numpy kron: ")
print(np.kron(v1, v2))