from_numpy_array#

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

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

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

Parameters:
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) 中选取。

See also

to_numpy_array

Notes

对于有向图,明确指定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图中属性的键。

Examples

简单整数权重边:

>>> 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