使用 Python 的 3 个矩阵的 Kronecker 乘积

Posted

技术标签:

【中文标题】使用 Python 的 3 个矩阵的 Kronecker 乘积【英文标题】:Kronecker product of 3 matrices using Python 【发布时间】:2022-01-21 06:27:58 【问题描述】:

假设我们有 2 个 2X2 numpy 数组:

X=np.array([[0,1],[1,0]])

I=np.array([[1,0],[0,1]])

考虑一下克罗内克产品

XX=X^X

我让符号 ^ 成为 Kronecker 产品的符号。这可以通过 python 中的numpy.kron() 函数轻松计算:

import numpy as np
kronecker_product = np.kron(X, X)

现在,假设我们要计算

XX=I^X^X

numpy.kron() 只接受两个数组作为参数,并期望它们具有相同的维度。如何在 python 中使用numpy.kron() 或其他技术执行此操作?

【问题讨论】:

np.kron(I, np.kron(X, X)) 呢? 【参考方案1】:

就像这样,尝试:

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))))

或者,更好的是,使用 Python 内置模块 functools 中的 reduce 以更易读的方式完成:

import functools as ft

lst = [A, B, C, D, E]
XX = ft.reduce(lambda x, y: np.kron(x, y), lst)

注意:我测试了所有这些,并且效果很好。

【讨论】:

以上是关于使用 Python 的 3 个矩阵的 Kronecker 乘积的主要内容,如果未能解决你的问题,请参考以下文章

python创建矩阵

《Python神经网络》3——神经网络矩阵乘法

Python练习题 028:求3*3矩阵对角线数字之和

在循环内的 Python 中附加一个矩阵

python 矩阵操作, 筛选符合条件的行

蓝桥杯国赛 矩阵计数(python-状压DP)