克罗内克积(Kronecker)

克罗内克积定义

 克罗内克积是两个任意大小的矩阵间的运算,它是张量积的特殊形式。给定两个矩阵 A ∈ R m × n \boldsymbol{A} \in \mathbb{R}^{m \times n} ARm×n B ∈ R p × q \boldsymbol{B} \in \mathbb{R}^{p \times q} BRp×q,则这两个矩阵的克罗内克积是一个在空间 R m p × n q \mathbb{R}^{mp \times nq} Rmp×nq的分块矩阵 A ⊗ B = [ a 11 B ⋯ a 1 n B ⋮ ⋱ ⋮ a m 1 B ⋯ a m n B ] \boldsymbol{A}\otimes\boldsymbol{B}=\left[\begin{array}{ccc}a_{11}\boldsymbol{B}&\cdots & a_{1n}\boldsymbol{B}\\\vdots&\ddots&\vdots\\a_{m1}\boldsymbol{B}&\cdots&a_{mn}\boldsymbol{B}\end{array}\right] AB=a11Bam1Ba1nBamnB更具体的可以表示为 A ⊗ B = [ a 11 b 11 a 11 b 12 ⋯ a 11 b 1 q ⋯ ⋯ a 1 n b 11 a 1 n b 12 ⋯ a 1 n b 1 q a 11 b 21 a 11 b 22 ⋯ a 11 b 2 q ⋯ ⋯ a 1 n b 21 a 1 n b 22 ⋯ a 1 n b 2 q ⋮ ⋮ ⋱ ⋮ ⋮ ⋮ ⋱ ⋮ a 11 b p 1 a 11 b p 2 ⋯ a 11 b p q ⋯ ⋯ a 1 n b p 1 a 1 n b p 2 ⋯ a 1 n b p q ⋮ ⋮ ⋮ ⋱ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋱ ⋮ ⋮ ⋮ a m 1 b 11 a m 1 b 12 ⋯ a m 1 b 1 q ⋯ ⋯ a m n b 11 a m n b 12 ⋯ a m n b 1 q a m 1 b 21 a m 1 b 22 ⋯ a m 1 b 2 q ⋯ ⋯ a m n b 21 a m n b 22 ⋯ a m n b 2 q ⋮ ⋮ ⋱ ⋮ ⋮ ⋮ ⋱ ⋮ a m 1 b p 1 a m 1 b p 2 ⋯ a m 1 b p q ⋯ ⋯ a m n b p 1 a m n b p 2 ⋯ a m n b p q ] \boldsymbol{A} \otimes \boldsymbol{B}=\left[\begin{array}{ccccccccc} a_{11} b_{11} & a_{11} b_{12} & \cdots & a_{11} b_{1 q} & \cdots & \cdots & a_{1 n} b_{11} & a_{1 n} b_{12} & \cdots & a_{1 n} b_{1 q} \\ a_{11} b_{21} & a_{11} b_{22} & \cdots & a_{11} b_{2 q} & \cdots & \cdots & a_{1 n} b_{21} & a_{1 n} b_{22} & \cdots & a_{1 n} b_{2 q} \\ \vdots & \vdots & \ddots & \vdots & & & \vdots & \vdots & \ddots & \vdots \\ a_{11} b_{p 1} & a_{11} b_{p 2} & \cdots & a_{11} b_{p q} & \cdots & \cdots & a_{1 n} b_{p 1} & a_{1 n} b_{p 2} & \cdots & a_{1 n} b_{p q} \\ \vdots & \vdots & & \vdots & \ddots & & \vdots & \vdots & & \vdots \\ \vdots & \vdots & & \vdots & & \ddots & \vdots & \vdots & & \vdots \\ a_{m 1} b_{11} & a_{m 1} b_{12} & \cdots & a_{m 1} b_{1 q} & \cdots & \cdots & a_{m n} b_{11} & a_{m n} b_{12} & \cdots & a_{m n} b_{1 q} \\ a_{m 1} b_{21} & a_{m 1} b_{22} & \cdots & a_{m 1} b_{2 q} & \cdots & \cdots & a_{m n} b_{21} & a_{m n} b_{22} & \cdots & a_{m n} b_{2 q} \\ \vdots & \vdots & \ddots & \vdots & & & \vdots & \vdots & \ddots & \vdots \\ a_{m 1} b_{p 1} & a_{m 1} b_{p 2} & \cdots & a_{m 1} b_{p q} & \cdots & \cdots & a_{m n} b_{p 1} & a_{m n} b_{p 2} & \cdots & a_{m n} b_{p q} \end{array}\right] AB=a11b11a11b21a11bp1am1b11am1b21am1bp1a11b12a11b22a11bp2am1b12am1b22am1bp2a11b1qa11b2qa11bpqam1b1qam1b2qam1bpqa1nb11a1nb21a1nbp1amnb11amnb21amnbp1a1nb12a1nb22a1nbp2amnb12amnb22amnbp2a1nb1qa1nb2qa1nbpqamnb1qamnb2qamnbpq

克罗内克积性质

 克罗内克积满足如下性质:

  • 结合律: ( A ⊗ B ) ⊗ C = A ⊗ ( B ⊗ C ) (\boldsymbol{A}\otimes\boldsymbol{B})\otimes\boldsymbol{C}=\boldsymbol{A}\otimes(\boldsymbol{B}\otimes\boldsymbol{C}) (AB)C=A(BC)
  • 分配律: A ⊗ ( B + C ) = A ⊗ B + A ⊗ C \boldsymbol{A}\otimes(\boldsymbol{B}+\boldsymbol{C})=\boldsymbol{A}\otimes \boldsymbol{B}+\boldsymbol{A}\otimes\boldsymbol{C}\quad\quad A(B+C)=AB+AC ( A + B ) ⊗ C = A ⊗ C + B ⊗ C (\boldsymbol{A}+\boldsymbol{B})\otimes\boldsymbol{C}=\boldsymbol{A}\otimes\boldsymbol{C}+\boldsymbol{B}\otimes\boldsymbol{C} (A+B)C=AC+BC
  • 双线性: ( k A ) ⊗ B = A ⊗ ( k B ) = k ( A ⊗ B ) (k\boldsymbol{A})\otimes\boldsymbol{B}=\boldsymbol{A}\otimes(k\boldsymbol{B})=k(\boldsymbol{A}\otimes\boldsymbol{B}) (kA)B=A(kB)=k(AB)
  • 转置: ( A ⊗ B ) ⊤ = A ⊤ ⊗ B ⊤ (\boldsymbol{A} \otimes \boldsymbol{B})^{\top}=\boldsymbol{A}^{\top} \otimes \boldsymbol{B}^{\top} (AB)=AB
  • 混合乘积性:如果 A , B , C , D \boldsymbol{A,B,C,D} A,B,C,D是四个矩阵,且矩阵乘积 A C \boldsymbol{AC} AC B D \boldsymbol{BD} BD存在,那么 ( A ⊗ B ) ( C ⊗ D ) = A C ⊗ B D (\boldsymbol{A}\otimes\boldsymbol{B})(\boldsymbol{C}\otimes\boldsymbol{D})=\boldsymbol{AC}\otimes\boldsymbol{BD} (AB)(CD)=ACBD这个性质称为“混合乘积性质”,因为它混合了矩阵乘积和克罗内克积。可以推出, A ⊗ B \boldsymbol{A}\otimes\boldsymbol{B} AB是可逆的当且仅当 A \boldsymbol{A} A B \boldsymbol{B} B是可逆的,其逆矩阵为 ( A ⊗ B ) − 1 = A − 1 ⊗ B − 1 (\boldsymbol{A}\otimes\boldsymbol{B})^{-1}=\boldsymbol{A}^{-1}\otimes\boldsymbol{B}^{-1} (AB)1=A1B1
  • v e c ( a b ⊤ ) = b ⊗ a vec(\bm{ab}^{\top})=\bm{b} \otimes \bm{a} vec(ab)=ba

克罗内克积实例

实例1

[ 1 2 3 1 ] ⊗ [ 0 3 2 1 ] = [ 1 ⋅ 0 1 ⋅ 3 2 ⋅ 0 2 ⋅ 3 1 ⋅ 2 1 ⋅ 1 2 ⋅ 2 2 ⋅ 1 3 ⋅ 0 3 ⋅ 3 1 ⋅ 0 1 ⋅ 3 3 ⋅ 2 3 ⋅ 1 1 ⋅ 2 1 ⋅ 1 ] = [ 0 3 0 6 2 1 4 2 0 9 0 3 6 3 2 1 ] \left[\begin{array}{ll} 1 & 2 \\ 3 & 1 \end{array}\right] \otimes\left[\begin{array}{ll} 0 & 3 \\ 2 & 1 \end{array}\right]=\left[\begin{array}{llll} 1 \cdot 0 & 1 \cdot 3 & 2 \cdot 0 & 2 \cdot 3 \\ 1 \cdot 2 & 1 \cdot 1 & 2 \cdot 2 & 2 \cdot 1 \\ 3 \cdot 0 & 3 \cdot 3 & 1 \cdot 0 & 1 \cdot 3 \\ 3 \cdot 2 & 3 \cdot 1 & 1 \cdot 2 & 1 \cdot 1 \end{array}\right]=\left[\begin{array}{llll} 0 & 3 & 0 & 6 \\ 2 & 1 & 4 & 2 \\ 0 & 9 & 0 & 3 \\ 6 & 3 & 2 & 1 \end{array}\right] [1321][0231]=10123032131133312022101223211311=0206319304026231

实例2

[ a 11 a 12 a 21 a 22 a 31 a 32 ] ⊗ [ b 11 b 12 b 13 b 21 b 22 b 23 ] = [ a 11 b 11 a 11 b 12 a 11 b 13 a 12 b 11 a 12 b 12 a 12 b 13 a 11 b 21 a 11 b 22 a 11 b 23 a 12 b 21 a 12 b 22 a 12 b 23 a 21 b 11 a 21 b 12 a 21 b 13 a 22 b 11 a 22 b 12 a 22 b 13 a 21 b 21 a 21 b 22 a 21 b 23 a 22 b 21 a 22 b 22 a 22 b 23 a 31 b 11 a 31 b 12 a 31 b 13 a 32 b 11 a 32 b 12 a 32 b 13 a 31 b 21 a 31 b 22 a 31 b 23 a 32 b 21 a 32 b 22 a 32 b 23 ] \left[\begin{array}{l} a_{11} & a_{12} \\ a_{21} & a_{22} \\ a_{31} & a_{32} \end{array}\right] \otimes\left[\begin{array}{lll} b_{11} & b_{12} & b_{13} \\ b_{21} & b_{22} & b_{23} \end{array}\right]=\left[\begin{array}{llllll} a_{11} b_{11} & a_{11} b_{12} & a_{11} b_{13} & a_{12} b_{11} & a_{12} b_{12} & a_{12} b_{13} \\ a_{11} b_{21} & a_{11} b_{22} & a_{11} b_{23} & a_{12} b_{21} & a_{12} b_{22} & a_{12} b_{23} \\ a_{21} b_{11} & a_{21} b_{12} & a_{21} b_{13} & a_{22} b_{11} & a_{22} b_{12} & a_{22} b_{13} \\ a_{21} b_{21} & a_{21} b_{22} & a_{21} b_{23} & a_{22} b_{21} & a_{22} b_{22} & a_{22} b_{23} \\ a_{31} b_{11} & a_{31} b_{12} & a_{31} b_{13} & a_{32} b_{11} & a_{32} b_{12} & a_{32} b_{13} \\ a_{31} b_{21} & a_{31} b_{22} & a_{31} b_{23} & a_{32} b_{21} & a_{32} b_{22} & a_{32} b_{23} \end{array}\right] a11a21a31a12a22a32[b11b21b12b22b13b23]=a11b11a11b21a21b11a21b21a31b11a31b21a11b12a11b22a21b12a21b22a31b12a31b22a11b13a11b23a21b13a21b23a31b13a31b23a12b11a12b21a22b11a22b21a32b11a32b21a12b12a12b22a22b12a22b22a32b12a32b22a12b13a12b23a22b13a22b23a32b13a32b23

NumPy的克罗内克积Kronecker product)是指两个数组的张量积。它将两个数组的所有元素相互组合,生成一个新的数组。克罗内克积的结果是一个具有更高维度的数组,其形状是两个输入数组的形状的乘积。 要在NumPy中计算克罗内克积,可以使用`numpy.kron()`函数。该函数接受两个数组作为参数,并返回它们的克罗内克积。以下是一个示例: ```python import numpy as np a = np.array([[1, 2], [3, 1]]) b = np.array([[0, 3], [2, 1]]) c = np.kron(a, b) ``` 在上述示例中,我们定义了两个输入数组`a`和`b`,然后使用`np.kron(a, b)`计算它们的克罗内克积,并将结果保存在变量`c`中。最后,我们打印出`c`的值: ``` array([[0, 3, 0, 6], [2, 1, 4, 2], [0, 9, 0, 3], [6, 3, 2, 1]]) ``` 因此,`c`是一个4x4的数组,其中的元素是`a`和`b`的克罗内克积的结果。 参考资料: - [NumPy官方文档 - numpy.kron()](https://numpy.org/doc/stable/reference/generated/numpy.kron.html) - [百度百科 - 克罗内克积](https://baike.baidu.com/item/克罗内克积F/6282573) 请注意,以上是使用`numpy.kron()`函数计算克罗内克积的一种方法。另外,还可以使用`numpy.einsum()`函数来实现克罗内克积。下面是一个使用`numpy.einsum()`函数计算克罗内克积的示例代码: ```python import numpy as np A = np.array([[1, 2], [3, 4], [5, 6]]) B = np.array([[2, 6], [3, 4]]) result = np.einsum('ir,jr->ijr', A, B).reshape(-1, A.shape[-1]) ``` 在上述示例中,我们定义了两个输入数组`A`和`B`。然后,我们使用`np.einsum()`函数和指定的字符串`'ir,jr->ijr'`计算它们的克罗内克积。最后,我们通过调用`reshape()`函数来调整结果的形状,使其成为一个二维数组。 最终的结果为: ``` array([[ 2, 12], [ 3, 8], [ 6, 24], [ 9, 16], [10, 36], [15, 24]]) ``` 以上就是使用NumPy计算克罗内克积的两种方法。希望对你有帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

道2024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值