to_numpy_array#

to_numpy_array(G, nodelist=None, dtype=None, order=None, multigraph_weight=<built-in function sum>, weight='weight', nonedge=0.0)[源代码]#

以numpy数组形式返回图形邻接矩阵。

参数
G图表

用于构建NumPy数组的网络X图。

nodelist列表,可选

行和列根据中的节点进行排序 nodelist 。如果 nodelistNone ,则订单由以下方式产生 G.nodes()

dtypeNumPy数据类型,可选

用于初始化数组的NumPy数据类型。如果为None,则使用NumPy默认值。如果满足以下条件,则可以构造数据类型 weight=None ,在这种情况下,使用dtype字段名称来查找边属性。结果是一个结构化数组,其中dtype中的每个命名字段对应于该边属性的邻接。有关详细信息,请参阅示例。

order{‘C’,‘F’},可选

在内存中是以C顺序存储多维数据,还是按Fortran顺序(按行或按列)存储多维数据。如果为None,则使用NumPy默认值。

multigraph_weight可调用,可选

确定如何处理多重图中的权重的函数。该函数应接受一系列权重并返回单个值。默认情况下,对多条边的权重求和。

weight字符串或无可选(默认值=‘Weight’)

保存用于边权重的数值的边属性。如果边没有该属性,则改用值1。 weight 一定是 None 如果使用结构化数据类型,则为。

nonedgeARRAY_LIKE(默认值=0.0)

用于表示邻接矩阵中的非边的值。对应于非边的阵列值通常被设置为零。但是,如果与实际边相对应的数组值也具有零值,则这可能不是所需的。如果是这样,您可能希望非边具有其他值,例如 nan

返回
ANumPy ndarray

图邻接矩阵

加薪
NetworkXError

如果 dtype 是结构化数据类型,并且 G 是一个多重图

ValueError

如果 dtype 是结构化数据类型,并且 weight 不是 None

笔记

对于有向图,请输入 i, j 对应于一条来自 ij

邻接矩阵中的条目由 weight 边属性。如果边没有权重属性,则条目的值设置为数字1。对于多条(平行)边,条目的值由 multigraph_weight 参数。默认情况下,对每条平行边的权重属性求和。

什么时候? nodelist 不包含中的每个节点 G ,邻接矩阵是从 G 这是由中的节点引起的 nodelist .

用于图中自循环边的约定是将对角数组项值指定给边的权重属性(如果边没有权重属性,则指定数字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.]])

实例

>>> 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.]])

此函数还可用于为具有结构化数据类型的多个边属性创建邻接矩阵:

>>> 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.]])

如上所述,当图中实际存在权重为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.)
array([[-1.,  2., -1.,  1.],
       [ 2., -1.,  0., -1.],
       [-1.,  0., -1.,  0.],
       [ 1., -1.,  0., -1.]])