attr_sparse_matrix#
- attr_sparse_matrix(G, edge_attr=None, node_attr=None, normalized=False, rc_order=None, dtype=None)[source]#
使用 G 中的属性返回一个 SciPy 稀疏数组。
如果只传入
G
,则构建邻接矩阵。设 A 是节点属性
node_attr
的离散值集合。则 A 的元素表示构建矩阵的行和列。现在,遍历G
中的每条边 e=(u,v),并考虑边属性edge_attr
的值。如果 ua 和 va 分别是 u 和 v 的节点属性node_attr
值,则将边属性的值添加到矩阵元素 (ua, va) 处。- 参数:
- G图
用于构建 NumPy 矩阵的 NetworkX 图。
- edge_attrstr,可选
矩阵的每个元素表示对应于矩阵行/列的节点属性的边的指定边属性的累计总和。该属性必须存在于图中的所有边上。如果未指定属性,则仅计算对应于矩阵元素的节点属性的边的数量。
- node_attrstr,可选
矩阵中的每一行和每一列都代表节点属性的特定值。该属性必须存在于图中的所有节点上。注意,此属性的值应可靠地可哈希。因此,不推荐使用浮点值。如果未指定属性,则行和列将是图的节点。
- normalizedbool,可选
如果为 True,则将每一行按其值的总和进行归一化。
- rc_orderlist,可选
节点属性值的列表。此列表指定数组行和列的顺序。如果未提供顺序,则顺序将是随机的(同时也是一个返回值)。
- 返回值:
- MSciPy 稀疏数组
属性矩阵。
- orderinglist
如果指定了
rc_order
,则只返回矩阵。然而,如果rc_order
为 None,则同时返回用于构建矩阵的顺序。
- 其他参数:
- dtypeNumPy 数据类型,可选
用于初始化数组的有效 NumPy 数据类型。请注意,如果数组需要归一化,某些数据类型可能会产生意外结果。该参数会传递给 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 颜色为
(红色, 红色) 是 3 # 唯一贡献来自边 (0,1) (红色, 蓝色) 是 2 # 贡献来自边 (0,2) 和 (1,2) (蓝色, 红色) 是 2 # 与 (红色, 蓝色) 相同,因为图是无向的 (蓝色, 蓝色) 是 0 # 没有边以蓝色为端点