当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python NetworkX attr_sparse_matrix用法及代码示例


本文简要介绍 networkx.linalg.attrmatrix.attr_sparse_matrix 的用法。

用法:

attr_sparse_matrix(G, edge_attr=None, node_attr=None, normalized=False, rc_order=None, dtype=None)

使用 G 中的属性返回 SciPy 稀疏矩阵。

如果只传入G,则构造邻接矩阵。

令 A 为节点属性 node_attr 的一组离散值。那么 A 的元素代表构造矩阵的行和列。现在,遍历 G 中的每条边 e=(u,v) 并考虑边属性 edge_attr 的值。如果 ua 和 va 分别是 u 和 v 的节点属性node_attr 的值,则将边属性的值添加到 (ua, va) 处的矩阵元素。

参数

G图形

NetworkX 图用于构造NumPy 矩阵。

edge_attrstr,可选

矩阵的每个元素表示其节点属性对应于 matirx 的行/列的边的指定边属性的运行总计。该属性必须存在于图中的所有边上。如果没有指定属性,那么我们只计算节点属性对应于矩阵元素的边数。

node_attrstr,可选

矩阵中的每一行和每一列都代表节点属性的一个特定值。该属性必须存在于图中的所有节点。注意,这个属性的值应该是可靠的哈希值。因此,不建议使用浮点值。如果未指定属性,则行和列将是图的节点。

normalized布尔型,可选

如果为 True,则每行都通过其值的总和进行归一化。

rc_order列表,可选

节点属性值的列表。此列表指定数组的行和列的顺序。如果没有提供排序,那么排序将是随机的(也是一个返回值)。

返回

MSciPy 稀疏矩阵

属性矩阵。

ordering列表

如果指定了rc_order,则只返回矩阵。但是,如果 rc_order 为 None,则也返回用于构造矩阵的排序。

其他参数

dtypeNumPy 数据类型,可选

用于初始化数组的有效 NumPy dtype。请记住,如果要对数组进行规范化,某些 dtype 可能会产生意想不到的结果。参数传递给 numpy.zeros()。如果未指定,则使用 NumPy 默认值。

例子

构造一个邻接矩阵:

>>> G = nx.Graph()
>>> G.add_edge(0, 1, thickness=1, weight=3)
>>> G.add_edge(0, 2, thickness=2)
>>> G.add_edge(1, 2, thickness=3)
>>> M = nx.attr_sparse_matrix(G, rc_order=[0, 1, 2])
>>> M.toarray()
array([[0., 1., 1.],
       [1., 0., 1.],
       [1., 1., 0.]])

或者,我们可以获得说明边厚度的矩阵。

>>> M = nx.attr_sparse_matrix(G, edge_attr="thickness", rc_order=[0, 1, 2])
>>> M.toarray()
array([[0., 1., 2.],
       [1., 0., 3.],
       [2., 3., 0.]])

我们还可以为节点着色并询问所有边 (u,v) 上的概率分布,说明:

Pr(v 有颜色 Y | u 有颜色 X)

>>> G.nodes[0]["color"] = "red"
>>> G.nodes[1]["color"] = "red"
>>> G.nodes[2]["color"] = "blue"
>>> rc = ["red", "blue"]
>>> M = nx.attr_sparse_matrix(G, node_attr="color", normalized=True, rc_order=rc)
>>> M.toarray()
array([[0.33333333, 0.66666667],
       [1.        , 0.        ]])

例如,上面告诉我们对于所有边 (u,v):

Pr( v 是红色 | u 是红色) = 1/3 Pr( v 是蓝色 | u 是红色) = 2/3

Pr( v 是红色 | u 是蓝色) = 1 Pr( v 是蓝色 | u 是蓝色) = 0

最后,我们可以获得节点颜色列出的总权重。

>>> M = nx.attr_sparse_matrix(G, edge_attr="weight", node_attr="color", rc_order=rc)
>>> M.toarray()
array([[3., 2.],
       [2., 0.]])

因此,所有边 (u,v) 上的总权重,其中 u 和 v 具有颜色:

(red, red) is 3 # 唯一的贡献来自边 (0,1) (red, blue) is 2 # 来自边 (0,2) 和 (1,2) 的贡献 (blue, red) is 2 # 相同as (red, blue) since graph is undirected (blue, blue) is 0 # 没有带有蓝色端点的边

相关用法


注:本文由纯净天空筛选整理自networkx.org大神的英文原创作品 networkx.linalg.attrmatrix.attr_sparse_matrix。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。