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
。如果nodelist
是None
,则订单由以下方式产生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
对应于一条来自i
至j
。邻接矩阵中的条目由
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.]])