使用 Python 的 3 个矩阵的克罗内克积
Kronecker product of 3 matrices using Python
假设我们有 2 个 2X2 numpy 数组:
X=np.array([[0,1],[1,0]])
和
I=np.array([[1,0],[0,1]])
考虑 Kronecker 产品
XX=X^X
我让符号 ^
成为 Kronecker 乘积的符号。这可以通过 python:
中的 numpy.kron()
函数轻松计算
import numpy as np
kronecker_product = np.kron(X, X)
现在,假设我们要计算
XX=I^X^X
numpy.kron()
仅将两个数组作为参数并期望它们具有相同的维度。如何使用 numpy.kron()
或 python 中的其他技术执行此操作?
对于类似的事情,尝试:
XX = np.kron(I, np.kron(X, X))
输出:
>>> XX
array([[0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 0]])
您可以嵌套调用 kron
任意次数。例如,对于 XX = A^B^C^D^E
,使用
XX = np.kron(A, np.kron(B, np.kron(C, np.kron(D, E))))
如果您不喜欢那里的冗长,您可以为 np.kron
创建一个别名:
k = np.kron
XX = k(A, k(B, k(C, k(D, E))))
或者,更好的是,使用 reduce
from the Python built-in module functools
以更具可读性的方式进行:
import functools as ft
lst = [A, B, C, D, E]
XX = ft.reduce(np.kron, lst)
注意:我测试了所有这些并且它运行良好。
假设我们有 2 个 2X2 numpy 数组:
X=np.array([[0,1],[1,0]])
和
I=np.array([[1,0],[0,1]])
考虑 Kronecker 产品
XX=X^X
我让符号 ^
成为 Kronecker 乘积的符号。这可以通过 python:
numpy.kron()
函数轻松计算
import numpy as np
kronecker_product = np.kron(X, X)
现在,假设我们要计算
XX=I^X^X
numpy.kron()
仅将两个数组作为参数并期望它们具有相同的维度。如何使用 numpy.kron()
或 python 中的其他技术执行此操作?
对于类似的事情,尝试:
XX = np.kron(I, np.kron(X, X))
输出:
>>> XX
array([[0, 0, 0, 1, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 0, 0],
[1, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 1],
[0, 0, 0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 0]])
您可以嵌套调用 kron
任意次数。例如,对于 XX = A^B^C^D^E
,使用
XX = np.kron(A, np.kron(B, np.kron(C, np.kron(D, E))))
如果您不喜欢那里的冗长,您可以为 np.kron
创建一个别名:
k = np.kron
XX = k(A, k(B, k(C, k(D, E))))
或者,更好的是,使用 reduce
from the Python built-in module functools
以更具可读性的方式进行:
import functools as ft
lst = [A, B, C, D, E]
XX = ft.reduce(np.kron, lst)
注意:我测试了所有这些并且它运行良好。