from_numpy_array#

from_numpy_array(A, parallel_edges=False, create_using=None, edge_attr='weight', *, nodelist=None)[source]#

从二维 NumPy 数组返回一个图。

二维 NumPy 数组被解释为图的邻接矩阵。

参数:
A二维 numpy.ndarray

图的邻接矩阵表示

parallel_edges布尔值

如果此参数为 True,create_using 是多重图,且 A 是整数数组,则数组中的条目 (i, j) 被解释为连接图中的顶点 ij 的并行边的数量。如果此参数为 False,则数组中的条目被解释为连接顶点的单条边的权重。

create_usingNetworkX 图构造函数,可选 (默认为 nx.Graph)

要创建的图类型。如果是图实例,则在填充前会清空。

edge_attr字符串,可选 (默认为“weight”)

将数组值分配给每条边的属性。如果为 None,则不分配边属性。

nodelist节点序列,可选

用作图中节点的序列对象。如果提供,节点列表的长度必须与 A 的维度相同。默认为 None,在这种情况下节点取自 range(n)

另请参阅

to_numpy_array

备注

对于有向图,明确指定 create_using=nx.DiGraph,并且 A 中的条目 i,j 对应于从 i 到 j 的边。

如果 create_usingnetworkx.MultiGraphnetworkx.MultiDiGraphparallel_edges 为 True,并且 A 的条目类型是 int,则此函数返回一个带有并行边的多重图(与 create_using 类型相同)。

如果 create_using 指示的是无向多重图,则只有数组 A 上三角形所指示的边会被添加到图中。

如果 edge_attr 为假值 (False 或 None),则不分配边属性,数组数据将被视为边存在或不存在的二进制掩码。否则,属性将按如下方式分配

如果 NumPy 数组中每个条目具有单一数据类型,它将被转换为适当的 Python 数据类型。

如果 NumPy 数组具有用户指定的复合数据类型,则数据字段的名称将用作生成 NetworkX 图中的属性键。

示例

简单的整数边权重

>>> import numpy as np
>>> A = np.array([[1, 1], [2, 1]])
>>> G = nx.from_numpy_array(A)
>>> G.edges(data=True)
EdgeDataView([(0, 0, {'weight': 1}), (0, 1, {'weight': 2}), (1, 1, {'weight': 1})])

如果 create_using 指示的是多重图,且数组只有整数条目且 parallel_edges 为 False,则这些条目将被视为连接节点的边的权重(不创建并行边)

>>> A = np.array([[1, 1], [1, 2]])
>>> G = nx.from_numpy_array(A, create_using=nx.MultiGraph)
>>> G[1][1]
AtlasView({0: {'weight': 2}})

如果 create_using 指示的是多重图,且数组只有整数条目且 parallel_edges 为 True,则这些条目将被视为连接那两个顶点的并行边的数量

>>> A = np.array([[1, 1], [1, 2]])
>>> temp = nx.MultiGraph()
>>> G = nx.from_numpy_array(A, parallel_edges=True, create_using=temp)
>>> G[1][1]
AtlasView({0: {'weight': 1}, 1: {'weight': 1}})

边上的用户定义复合数据类型

>>> dt = [("weight", float), ("cost", int)]
>>> A = np.array([[(1.0, 2)]], dtype=dt)
>>> G = nx.from_numpy_array(A)
>>> G.edges()
EdgeView([(0, 0)])
>>> G[0][0]["cost"]
2
>>> G[0][0]["weight"]
1.0