创建包含两个块和其余 0 的块图

Create Block Diagram with two Blocks and rest of 0's

我需要制作一个框图,其中我有两个对角线块,所有其他数字为零。我需要它是一个 20x20 矩阵。

我目前所掌握的是

import numpy as np
T = 0.6
B = np.array([[T, np.sqrt(1-T)], [-np.sqrt(1-T), T]])

B_diag = np.kron(np.eye(10,dtype=int),B)

`

它给出了一个 20x20 矩阵,但所有对角线上都有 B。我是编码新手,所以不确定如何执行此操作。感谢您的帮助!

要求输出:

|C1|C2|C3|C4|C5|C6|C7|C8|
|--|--|--|--|--|--|--|--|
|1|2|0|0|0|0|0|0|0|0|0|0|
|3|4|0|0|0|0|0|0|0|0|0|0|
|0|0|1|2|0|0|0|0|0|0|0|0|
|0|0|3|4|0|0|0|0|0|0|0|0|
|0|0|0|0|0|0|0|0|0|0|0|0|
|0|0|0|0|0|0|0|0|0|0|0|0|
|0|0|0|0|0|0|0|0|0|0|0|0|
|0|0|0|0|0|0|0|0|0|0|0|0|

有 20 行和 20 列,其中 1 = 4 = T,2 = sqrt(T),3 = -sqrt(T)。 C 只是用于堆栈所需的格式。

您只需将 4x4 数组拼接成更大的 20x20 零数组。


import numpy as np
T = 0.6
B = np.array([[T, np.sqrt(1-T)], [-np.sqrt(1-T), T]])

B_diag = np.kron(np.eye(2,dtype=int),B)

M = np.zeros((20,20))

M[:4, :4] = B_diag

print(M)

并且您在第一个 5x5 块中获得了预期的输出

[[ 0.6         0.63245553  0.          0.          0.        ]
 [-0.63245553  0.6        -0.          0.          0.        ]
 [ 0.          0.          0.6         0.63245553  0.        ]
 [-0.          0.         -0.63245553  0.6         0.        ]
 [ 0.          0.          0.          0.          0.        ]]