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) 被解释为连接顶点 i 和 j 的平行边的数量。 如果为False,那么数组中的元素被解释为连接这两个顶点的单条边的权重。- create_usingNetworkX图构造函数, 可选 (默认=nx.Graph)
要创建的图类型。如果是图实例,则在填充前清空。
- edge_attr字符串, 可选 (默认=”weight”)
每个边上分配的数组值的属性。如果为None,则不会分配边属性。
- nodelist节点序列, 可选
用于图中的节点的对象序列。如果提供,节点列表的长度必须与
A
的维度相同。默认是None
,在这种情况下,节点从range(n)
中选取。
See also
Notes
对于有向图,明确指定create_using=nx.DiGraph, 并且A的元素i,j对应从i到j的边。
如果
create_using
是networkx.MultiGraph
或networkx.MultiDiGraph
,parallel_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