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

标签 python arrays numpy kronecker-product

假设我们有 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() 只接受两个数组作为参数,并期望它们具有相同的维度。如何使用 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来自 Python 内置模块 functools以更易读的方式进行:

import functools as ft

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

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

关于python - 使用 Python 的 3 个矩阵的 Kronecker 乘积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70408249/

相关文章:

python - 如何在Linux命令中使用Python

python - 为什么 django 中 postgres 数据库连接的 connection.timezone 为 None ?

java - 为什么我的交换功能有效?

python - 对 groupby 对象中的每个组应用重采样

python - 从字典的特定键创建多维numpy数组

python - 如何仅保留数据框中的前N个值

python - Numpy 聚合平均值

java - 从java导入django模块

带有 .begin() 和 .end() 的 C++ const char

javascript - 将数组组转换为对象