目录

Python Graph Data

CSGraph代表Compressed Sparse Graph ,它专注于基于稀疏矩阵表示的快速图算法。

图形表示

首先,让我们了解稀疏图是什么以及它在图表表示中的作用。

什么是稀疏图?

图只是节点的集合,它们之间有链接。 图表几乎可以代表任何东西 - 社交网络连接,其中每个节点都是一个人并且与熟人相连; 图像,其中每个节点是像素并且连接到相邻像素; 高维分布中的点,每个节点连接到最近的邻居,几乎可以想象任何其他东西。

表示图数据的一种非常有效的方法是在稀疏矩阵中:让我们称之为G.矩阵G的大小为N×N,G [i,j]给出节点'i'和节点之间的连接值'J'。 稀疏图形主要包含零 - 也就是说,大多数节点只有少量连接。 在大多数感兴趣的情况下,该属性证明是正确的。

稀疏图子模块的创建是由scikit-learn中使用的几种算法推动的,其中包括以下内容 -

  • Isomap - 一种流形学习算法,需要在图中找到最短路径。

  • Hierarchical clustering - 一种基于最小生成树的聚类算法。

  • Spectral Decomposition - 一种基于稀疏图拉普拉斯算子的投影算法。

作为一个具体的例子,假设我们想要代表以下无向图 -

无向图

该图有三个节点,其中节点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.])
↑回到顶部↑
WIKI教程 @2018