假设我有一个维度 k
。我正在寻找的是一个将 k
作为输入并返回以下 block 矩阵的函数。
令 I
为 k 维单位矩阵,0
为 k 维零方阵
即:
def function(k):
...
return matrix
function(2) -> np.array([I, 0])
function(3) -> np.array([[I,0,0]
[0,I,0]])
function(4) -> np.array([[I,0,0,0]
[0,I,0,0],
[0,0,I,0]])
function(5) -> np.array([[I,0,0,0,0]
[0,I,0,0,0],
[0,0,I,0,0],
[0,0,0,I,0]])
也就是说,输出是一个 (k-1,k) 矩阵,其中单位矩阵在对角线元素上,零矩阵在其他地方。
我尝试过的:
我知道如何创建任何单独的行,我只是想不出一种方法来将它放入一个函数中,以便它采用维度 k
,并吐出我需要的矩阵.
例如
np.block([[np.eye(3),np.zeros((3, 3)),np.zeros((3, 3))],
[np.zeros((3, 3)),np.eye(3),np.zeros((3, 3))]])
将是 k=3 时所需的输出
scipy.linalg.block_diag看起来它可能在正确的轨道上......
最佳答案
IMO,np.eye
已经拥有您需要的一切,因为您可以分别定义行数和列数。
所以你的函数应该看起来像
def fct(k):
return np.eye(k**2-k, k**2)
关于python - Numpy:创建 block 矩阵的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50822986/