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)in G 并考虑边属性的值 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没有带蓝色端点的边缘