to_numpy_array#
- to_numpy_array(G, nodelist=None, dtype=None, order=None, multigraph_weight=<built-in function sum>, weight='weight', nonedge=0.0)[source]#
返回图的邻接矩阵作为NumPy数组。
- Parameters:
- G图
用于构造NumPy数组的NetworkX图。
- nodelist列表, 可选
行和列根据
nodelist
中的节点进行排序。 如果nodelist
为None
,则排序由G.nodes()
生成。- dtypeNumPy数据类型, 可选
用于初始化数组的NumPy数据类型。如果为None,则使用NumPy默认值。如果
weight=None
,dtype可以是结构化的, 在这种情况下,dtype字段名称用于查找边属性。结果是一个结构化数组,其中dtype中的每个命名字段对应于该边属性的邻接关系。 详见示例。- order{‘C’, ‘F’}, 可选
是否在内存中以C-或Fortran-连续(行或列)顺序存储多维数据。如果为None,则使用NumPy默认值。
- multigraph_weight可调用对象, 可选
确定如何在多重图中处理权重的函数。该函数应接受一系列权重并返回单个值。默认是汇总多条边的权重。
- weight字符串或None, 可选 (默认 = ‘weight’)
用于边权重的边属性。如果边没有该属性,则使用值1。如果使用结构化dtype,
weight
必须为None
。- nonedge类数组 (默认 = 0.0)
邻接矩阵中表示非边的值。通常将对应于非边的数组值设置为零。然而,如果有实际边也具有零值,这可能不合适。 如果需要,可以将非边设置为其他值,例如
nan
。
- Returns:
- ANumPy ndarray
图的邻接矩阵
- Raises:
- NetworkXError
如果
dtype
是结构化dtype且G
是多重图- ValueError
如果
dtype
是结构化dtype且weight
不是None
See also
Notes
对于有向图,条目
i, j
对应于从i
到j
的边。邻接矩阵中的条目由
weight
边属性给出。当边没有权重属性时,条目值设置为1。对于多条(平行)边,条目值由multigraph_weight
参数确定。 默认是汇总每条平行边的权重属性。当
nodelist
不包含G
中的每个节点时,邻接矩阵是根据nodelist
中节点诱导的G
的子图构建的。图中自环边的约定是将对角线数组条目值分配给边的权重属性(如果没有权重属性,则为1)。如果希望采用边权重加倍的替代约定,可以按如下方式修改生成的NumPy数组:
>>> import numpy as np >>> G = nx.Graph([(1, 1)]) >>> A = nx.to_numpy_array(G) >>> A array([[1.]]) >>> A[np.diag_indices_from(A)] *= 2 >>> A array([[2.]])
Examples
>>> G = nx.MultiDiGraph() >>> G.add_edge(0, 1, weight=2) 0 >>> G.add_edge(1, 0) 0 >>> G.add_edge(2, 2, weight=3) 0 >>> G.add_edge(2, 2) 1 >>> nx.to_numpy_array(G, nodelist=[0, 1, 2]) array([[0., 2., 0.], [1., 0., 0.], [0., 0., 4.]])
当使用
nodelist
参数时,G
中未出现在nodelist
中的节点及其边不会包含在邻接矩阵中。以下是一个示例:>>> G = nx.Graph() >>> G.add_edge(3, 1) >>> G.add_edge(2, 0) >>> G.add_edge(2, 1) >>> G.add_edge(3, 0) >>> nx.to_numpy_array(G, nodelist=[1, 2, 3]) array([[0., 1., 1.], [1., 0., 0.], [1., 0., 0.]])
此函数还可用于为多个边属性创建具有结构化dtype的邻接矩阵:
>>> G = nx.Graph() >>> G.add_edge(0, 1, weight=10) >>> G.add_edge(1, 2, cost=5) >>> G.add_edge(2, 3, weight=3, cost=-4.0) >>> dtype = np.dtype([("weight", int), ("cost", float)]) >>> A = nx.to_numpy_array(G, dtype=dtype, weight=None) >>> A["weight"] array([[ 0, 10, 0, 0], [10, 0, 1, 0], [ 0, 1, 0, 3], [ 0, 0, 3, 0]]) >>> A["cost"] array([[ 0., 1., 0., 0.], [ 1., 0., 5., 0.], [ 0., 5., 0., -4.], [ 0., 0., -4., 0.]])
如上所述,”nonedge”参数在图中实际存在权重为0的边时特别有用。将非边值设置为不同于0的值,可以更清楚地区分这些0权重边和实际的非边值。
>>> G = nx.Graph() >>> G.add_edge(3, 1, weight=2) >>> G.add_edge(2, 0, weight=0) >>> G.add_edge(2, 1, weight=0) >>> G.add_edge(3, 0, weight=1) >>> nx.to_numpy_array(G, nonedge=-1.0) array([[-1., 2., -1., 1.], [ 2., -1., 0., -1.], [-1., 0., -1., 0.], [ 1., -1., 0., -1.]])