📅  最后修改于: 2020-12-13 14:19:34             🧑  作者: Mango
CSGraph代表压缩稀疏图,它专注于基于稀疏矩阵表示的快速图算法。
首先,让我们了解什么是稀疏图及其在图形表示中的帮助。
图只是节点的集合,节点之间具有链接。图几乎可以代表任何事物-社交网络连接,其中每个节点都是一个人,并与熟人相连;图像,其中每个节点是一个像素,并连接到相邻像素;高维分布中的点,其中每个节点都连接到其最近的邻居,几乎可以想象到其他任何事物。
表示图形数据的一种非常有效的方法是在稀疏矩阵中:让我们将其称为G。矩阵G的大小为N x N,而G [i,j]给出节点’i’和node之间的连接值。 ‘j’。稀疏图主要包含零-也就是说,大多数节点只有几个连接。在大多数情况下,此属性都是正确的。
稀疏图子模块的创建是由scikit-learn中使用的几种算法推动的,其中包括以下内容-
Isomap-流形学习算法,需要找到图中最短的路径。
分层聚类-基于最小生成树的聚类算法。
频谱分解-基于稀疏图拉普拉斯算子的投影算法。
举一个具体的例子,假设我们想代表以下无向图-
此图包含三个节点,其中节点0和1通过权重2的边缘连接,节点0和2通过权重1的边缘连接。我们可以构造密集,蒙版和稀疏表示,如以下示例所示,请记住,无向图由对称矩阵表示。
G_dense = np.array([ [0, 2, 1],
[2, 0, 0],
[1, 0, 0] ])
G_masked = np.ma.masked_values(G_dense, 0)
from scipy.sparse import csr_matrix
G_sparse = csr_matrix(G_dense)
print G_sparse.data
上面的程序将生成以下输出。
array([2, 1, 2, 1])
这与前面的图相同,除了节点0和2通过零权重的边连接。在这种情况下,上面的密集表示会导致歧义-如果零是有意义的值,那么如何表示非边缘。在这种情况下,必须使用掩码表示或稀疏表示来消除歧义。
让我们考虑以下示例。
from scipy.sparse.csgraph import csgraph_from_dense
G2_data = np.array
([
[np.inf, 2, 0 ],
[2, np.inf, np.inf],
[0, np.inf, np.inf]
])
G2_sparse = csgraph_from_dense(G2_data, null_value=np.inf)
print G2_sparse.data
上面的程序将生成以下输出。
array([ 2., 0., 2., 0.])