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) 被解释为连接图中的顶点 i 和 j 的并行边的数量。如果此参数为 False,则数组中的条目被解释为连接顶点的单条边的权重。- create_usingNetworkX 图构造函数,可选 (默认为 nx.Graph)
要创建的图类型。如果是图实例,则在填充前会清空。
- edge_attr字符串,可选 (默认为“weight”)
将数组值分配给每条边的属性。如果为 None,则不分配边属性。
- nodelist节点序列,可选
用作图中节点的序列对象。如果提供,节点列表的长度必须与
A
的维度相同。默认为None
,在这种情况下节点取自range(n)
。
另请参阅
备注
对于有向图,明确指定 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 图中的属性键。
示例
简单的整数边权重
>>> 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