attr_matrix#
- attr_matrix(G, edge_attr=None, node_attr=None, normalized=False, rc_order=None, dtype=None, order=None)[源代码]#
使用g中的属性返回numpy矩阵。
只要
G
传入,然后构造邻接矩阵。设为节点属性的离散值集
node_attr
. 然后a的元素表示所构造矩阵的行和列。现在,迭代每个边e=(u,v)inG
并考虑边属性的值edge_attr
. 如果ua和va是节点属性的值node_attr
对于u和v,则边缘属性的值分别添加到(ua,va)处的矩阵元素中。- 参数
- G图表
用于构建NumPy矩阵的网络X图。
- edge_attr字符串,可选
矩阵的每个元素表示其节点属性对应于矩阵X的行/列的边的指定边属性的连续总和。该属性必须存在于图形中的所有边。如果没有指定属性,那么我们只计算节点属性对应于矩阵元素的边数。
- node_attr字符串,可选
矩阵中的每一行和每一列表示节点属性的特定值。该属性必须存在于图形中的所有节点。请注意,该属性的值应该是可靠的Hasable。因此,不建议使用浮点值。如果未指定属性,则行和列将是图形的节点。
- normalized布尔值,可选
如果为True,则每行通过其值的总和进行标准化。
- rc_order列表,可选
节点属性值的列表。此列表指定数组的行和列的顺序。如果未提供排序,则排序将是随机的(也是返回值)。
- 返回
- MNumPy矩阵
属性矩阵。
- ordering列表
如果
rc_order
则只返回矩阵。但是,如果rc_order
为NONE,则还将返回用于构造矩阵的顺序。
- 其他参数
- dtypeNumPy数据类型,可选
用于初始化数组的有效NumPy数据类型。请记住,如果要规格化数组,某些数据类型可能会产生意外的结果。该参数被传递给numpy.zeros()。如果未指定,则使用NumPy默认值。
- order{‘C’,‘F’},可选
在内存中是以C顺序存储多维数据,还是按Fortran顺序(按行或按列)存储多维数据。该参数被传递给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) >>> nx.attr_matrix(G, rc_order=[0, 1, 2]) matrix([[0., 1., 1.], [1., 0., 1.], [1., 1., 0.]])
或者,我们可以得到描述边缘厚度的矩阵。
>>> nx.attr_matrix(G, edge_attr="thickness", rc_order=[0, 1, 2]) matrix([[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"] >>> nx.attr_matrix(G, node_attr="color", normalized=True, rc_order=rc) matrix([[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
最后,我们可以得到由节点颜色列出的总权重。
>>> nx.attr_matrix(G, edge_attr="weight", node_attr="color", rc_order=rc) matrix([[3., 2.], [2., 0.]])
因此,所有边缘的总重量(u,v),其中u和v具有颜色:
(红色,红色)为3唯一贡献来自边缘(0,1)(红色,蓝色)为2来自边缘(0,2)的贡献,(1,2)(蓝色,红色)为2与(红色,蓝色)相同,因为图是无向(蓝色,蓝色)为0没有带蓝色端点的边缘