通过指定非对角块构造矩阵

2024-09-19 22:15:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要从指定非对角块的矩阵列表中构建一个矩阵,理想情况下是稀疏矩阵

我知道bmat,但这需要知道有多少个矩阵。我想知道是否有scipy.sparse.block_diag(list_of_mats,-1)的等价物

该函数应该能够处理非平方矩阵(否则我可以直接填充来自block_diag(list_of_mats)的输出)。例如,输入([[1,2]], [[3]])应该返回[[0,0,0,0],[0,0,0,0],[1,2,0,0],[0,0,3,0]]

例如,在Mathematica中,我可以指定一个矩阵矩阵并使用ArrayFlatten

评论澄清 是的,len(list_of_mats)确实给出了矩阵的数目,但是我必须动态地构造[[None, ..., None], [A1, None, ...], [None, A2, None, ...], ...]来将bmat应用到它,我不知道如何做到这一点(A1等是list_of_mats的元素)。我想这也回答了另一个问题。这种映射的工作原理是,首先用list_of_mats在(比如说)第一个对角线上写一个矩阵,然后将其展平,使其成为一个正规矩阵。与块对角矩阵不同的是,列表中的矩阵不必是正方形,这就是我想用我的示例来说明的。我认为这张地图是独一无二的。我不认为numpy.tri在这里有帮助(它也不是稀疏的)


Tags: ofnone列表a1情况矩阵scipyblock