我需要从指定非对角线块的矩阵列表中构建一个矩阵,理想情况下是稀疏矩阵。
我知道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
应用于矩阵,而我不知道该怎么做({{ 1}}等是A1
的元素。我认为这也回答了另一个问题。映射的工作方式是:首先在(例如)对角线上写list_of_mats
的矩阵(矩阵),然后将其展平以使其成为普通矩阵。与块对角线矩阵不同,列表中的矩阵不必一定要平方才能起作用,这就是我想在示例中说明的。我认为这张地图是独一无二的。我不认为numpy.tri在这里有帮助(也不稀疏)。