如何在python中有效地结合断开的csr矩阵?

问题描述

我有两个 scipy 稀疏矩阵 matrix_1 和 matrix_2。它们的尺寸如下:

<628x628 sparse matrix of type '<class 'numpy.float64'>'
<411x411 sparse matrix of type '<class 'numpy.float64'>'

我试图将这两个矩阵组合在一起,使两个不连接的矩阵在一个 csr 矩阵中。

例如,假设两个矩阵是

  1 2 3      1 2 3
1 0 0 1    1 1 1 0
2 1 0 1    2 1 1 1
3 1 1 0    3 0 1 0

并在操作之后,结果应该是

  1 2 3 4 5 6          1 2 3 4 5 6
1 0 0 1              1 0 0 1 0 0 0
2 1 0 1              2 1 0 1 0 0 0
3 1 1 0           => 3 1 1 0 0 0 0
4       1 1 0        4 0 0 0 1 1 0
5       1 1 1        5 0 0 0 1 1 1
6       0 1 0        6 0 0 0 0 1 0

我检查了 scipy 的文档,发现了 vstackhstack 函数,但它们不起作用,因为矩阵的维度不一样。即使维度成立,他们也不会给出我想要的结果,因为这两个图是断开的。

我已经检查了这些 stackoverflow 问题:

scipy append all rows of one sparse matrix to another How to concatenate two matrices in Python?

还有很多不相关的帖子,但我想不出一个有效的解决方案。我发现的唯一想法是将 csr 矩阵转换为字典,附加它们并将其转换回 csr 矩阵,但它似乎效率很低。 有没有一种有效的方法可以用 scipy 和 python 来做到这一点?

提前感谢您的帮助!

解决方法

正如评论中建议的hpaulj

import scipy.sparse as sp
combined_matrix = sp.bmat([[graph_1,None],[None,graph_2]],format="csr")

解决了我的问题。