python中networkx函数的具体使用
作者:笃℃ 发布时间:2023-01-05 12:29:16
1. 介绍
1.1 前言
NetworkX是复杂网络研究领域中的常用Python包。
1.2 图的类型(Graph Types)
允许以可哈希的object作为节点,任何Python object作为边属性。
如何选择使用哪种图:
这里解释一下什么是平行边:连接一对顶点的两条边叫做平行边,即,无向图中,两个顶点间有多条边,他们叫做平行边,打个比方,北京和上海直接可以 是公路、铁路、飞机,那么他们互为平行边。
1.3 常用方法
创建一个空的图
1)无向图:G = nx.Graph()
2)有向图:DG = nx.DiGraph()
将有向图转换为无向图:G = nx.Graph(DG)
图是否有向:G.is_directed() 返回布尔值
添加节点
1)直接添加一个节点(任何object都可以作为节点,包括另一个图)G.add_node(1)、G.add_node(DG)
2)从任何容器加点:a list, dict, set or even the lines from a file or the nodes from another graph…;G.add_nodes_from() 或 nx.path_graph()
添加边
1)添加一条边 G.add_edge(u, v)
2)添加一个边的列表 G.add_edges_from([(1, 2), (1, 3)])
3)添加一个边的collection G.add_edges_from(H.edges)
4)如果添加的边的点不存在于图中,会自动添上相应节点而不报错
属性attribute
1)图的节点/边/图都可以在关联的attribute字典中以键值对key/value形式存储attribute(key一定要是可哈希的)
2)默认情况下属性字典是空的
3)可以通过add_edge() add_node() 方法或直接操作分别名为graph edges nodes的属性字典来进行操作
2. 代码示例
import networkx as nx
import numpy as np
#定义图的节点和边
nodes=['0','1','2','3','4','5','a','b','c']
edges=[('0','0',1),('0','1',1),('0','5',1),('0','5',2),('1','2',3),('1','4',5),('2','1',7),('2','4',6),('a','b',0.5),('b','c',0.5),('c','a',0.5)]
plt.subplots(1,2,figsize=(10,3))
#定义一个无向图和有向图
G1 = nx.Graph()
G1.add_nodes_from(nodes)
G1.add_weighted_edges_from(edges)
G2 = nx.DiGraph()
G2.add_nodes_from(nodes)
G2.add_weighted_edges_from(edges)
pos1=nx.circular_layout(G1)
pos2=nx.circular_layout(G2)
#画出无向图和有向图
plt.subplot(121)
nx.draw(G1,pos1, with_labels=True, font_weight='bold')
plt.title('无向图',fontproperties=myfont)
plt.axis('on')
plt.xticks([])
plt.yticks([])
plt.subplot(122)
nx.draw(G2,pos2, with_labels=True, font_weight='bold')
plt.title('有向图',fontproperties=myfont)
plt.axis('on')
plt.xticks([])
plt.yticks([])
plt.show()
#控制numpy输出小数位数
np.set_printoptions(precision=3)
#邻接矩阵
A = nx.adjacency_matrix(G1)
print('邻接矩阵:\n',A.todense())
邻接矩阵:
[[0. 0. 0. 0. 5. 0. 0. 0. 6. ]
[0. 0. 0. 2. 0. 0. 0. 0. 0. ]
[0. 0. 0. 0. 0. 0.5 0.5 0. 0. ]
[0. 2. 0. 1. 1. 0. 0. 0. 0. ]
[5. 0. 0. 1. 0. 0. 0. 0. 7. ]
[0. 0. 0.5 0. 0. 0. 0.5 0. 0. ]
[0. 0. 0.5 0. 0. 0.5 0. 0. 0. ]
[0. 0. 0. 0. 0. 0. 0. 0. 0. ]
[6. 0. 0. 0. 7. 0. 0. 0. 0. ]]
#关联矩阵
I = nx.incidence_matrix(G1)
print('\n关联矩阵:\n',I.todense())
关联矩阵:
[[1. 1. 0. 0. 0. 0. 0. 0. 0.]
[0. 0. 1. 0. 0. 0. 0. 0. 0.]
[0. 0. 0. 1. 1. 0. 0. 0. 0.]
[0. 0. 1. 0. 0. 1. 0. 0. 0.]
[0. 1. 0. 0. 0. 1. 0. 1. 0.]
[0. 0. 0. 1. 0. 0. 0. 0. 1.]
[0. 0. 0. 0. 1. 0. 0. 0. 1.]
[0. 0. 0. 0. 0. 0. 0. 0. 0.]
[1. 0. 0. 0. 0. 0. 0. 1. 0.]]
#拉普拉斯矩阵
L=nx.laplacian_matrix(G1)
print('\n拉普拉斯矩阵:\n',L.todense())
拉普拉斯矩阵:
[[11. 0. 0. 0. -5. 0. 0. 0. -6. ]
[ 0. 2. 0. -2. 0. 0. 0. 0. 0. ]
[ 0. 0. 1. 0. 0. -0.5 -0.5 0. 0. ]
[ 0. -2. 0. 3. -1. 0. 0. 0. 0. ]
[-5. 0. 0. -1. 13. 0. 0. 0. -7. ]
[ 0. 0. -0.5 0. 0. 1. -0.5 0. 0. ]
[ 0. 0. -0.5 0. 0. -0.5 1. 0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. ]
[-6. 0. 0. 0. -7. 0. 0. 0. 13. ]]
#标准化的拉普拉斯矩阵
NL=nx.normalized_laplacian_matrix(G1)
print('标准化的拉普拉斯矩阵:\n',NL.todense())
标准化的拉普拉斯矩阵:
[[ 1. 0. 0. 0. -0.418 0. 0. 0. -0.502]
[ 0. 1. 0. -0.707 0. 0. 0. 0. 0. ]
[ 0. 0. 1. 0. 0. -0.5 -0.5 0. 0. ]
[ 0. -0.707 0. 0.75 -0.139 0. 0. 0. 0. ]
[-0.418 0. 0. -0.139 1. 0. 0. 0. -0.538]
[ 0. 0. -0.5 0. 0. 1. -0.5 0. 0. ]
[ 0. 0. -0.5 0. 0. -0.5 1. 0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. ]
[-0.502 0. 0. 0. -0.538 0. 0. 0. 1. ]]
#有向图拉普拉斯矩阵
DL=nx.directed_laplacian_matrix(G2)
print('\n有向拉普拉斯矩阵:\n',DL)
有向拉普拉斯矩阵:
[[ 0.889 -0.117 -0.029 -0.087 -0.319 -0.029 -0.029 -0.129 -0.242]
[-0.117 0.889 -0.026 -0.278 -0.051 -0.026 -0.026 -0.114 -0.056]
[-0.029 -0.026 0.994 -0.012 -0.009 -0.481 -0.481 -0.025 -0.01 ]
[-0.087 -0.278 -0.012 0.757 -0.097 -0.012 -0.012 -0.052 -0.006]
[-0.319 -0.051 -0.009 -0.097 0.994 -0.009 -0.009 -0.041 -0.434]
[-0.029 -0.026 -0.481 -0.012 -0.009 0.994 -0.481 -0.025 -0.01 ]
[-0.029 -0.026 -0.481 -0.012 -0.009 -0.481 0.994 -0.025 -0.01 ]
[-0.129 -0.114 -0.025 -0.052 -0.041 -0.025 -0.025 0.889 -0.045]
[-0.242 -0.056 -0.01 -0.006 -0.434 -0.01 -0.01 -0.045 0.994]]
#拉普拉斯算子的特征值
LS=nx.laplacian_spectrum(G1)
print('\n拉普拉斯算子的特征值:\n',LS)
拉普拉斯算子的特征值:
[-1.436e-15 0.000e+00 4.610e-16 7.000e-01 1.500e+00 1.500e+00
4.576e+00 1.660e+01 2.013e+01]
#邻接矩阵的特征值
AS=nx.adjacency_spectrum(G1)
print('邻接矩阵的特征值:\n',AS)
邻接矩阵的特征值:
[12.068+0.000e+00j 2.588+0.000e+00j -7.219+0.000e+00j -4.925+0.000e+00j
-1.513+0.000e+00j 1. +0.000e+00j -0.5 +2.393e-17j -0.5 -2.393e-17j0. +0.000e+00j]
#无向图的代数连通性
AC=nx.algebraic_connectivity(G1)
print('无向图的代数连通性:\n',AC)
无向图的代数连通性:
0.0
#图的光谱排序
SO=nx.spectral_ordering(G1)
print('图的光谱排序:\n',SO)
图的光谱排序:
['4', '2', '1', '0', '5', 'b', 'c', 'a', '3']
来源:https://blog.csdn.net/qq_51392112/article/details/129015761


猜你喜欢
- 要做好一个HTML邮件,说简单,还真不怎么复杂,说它复杂,其实也不难。-_-!!以前写过类似的[ 关于HTML邮件的总结 ],最近又犯愁,就
- 本文使用的是163邮件进行测试。注:163邮箱现在需要使用 客户端授权码 进行测试,不再支持邮箱密码进行测试。 
- 包括安装时提示有挂起的操作、收缩数据库、压缩数据库、转移数据库给新用户以已存在用户权限、检查备份集、修复数据库等。 (一)挂起操作在安装S
- 方案5 使用xml参数 对sql server xml类型参数不熟悉的童鞋需要先了解下XQuery概念,这里简单提下XQuery 是用来从
- 对于数字索引数组来说,通过 array_push()函数向数组中添加元素。array_push()函数将数组当成一个栈,将传入的变量压入该数
- python的random库,提供了很多随机抽样方法。1. 设置随机数种子 seed()在适当的情形下,为例保证抽样的结果固定,不因多次运行
- 1、引言小 * 丝:鱼哥,你说百度翻译的准确,还是google翻译的准确?小鱼:自己翻译的最准确。小 * 丝:你这… 抬杠。小
- 详情查看下面的代码:如果被识别就要添加一个cookie如果没有被识别的话就要一个user—agent就好了。如果出现乱码就设置编码格式为ut
- 一、提要python的@property是python的一种装饰器,是用来修饰方法的。python @property 装饰器使一个方法可以
- 1. Map 使用时需要注意哪些问题?Map 的键必须是可比较的类型,如整数、字符串和指针等,但是切片、函数和结构体等类型是不可比较的,因此
- 如何在线删除表或索引? <%Set conn1 = Server.CreateObject(&
- 箱形图概念后面的图形都是一些专业的统计图形,当然也会是我们可视化的对象。箱形图(Box-plot)又称为盒须图、盒式图或箱线图,是一种用作显
- Python 网页解析HTMLParse的实例详解使用python将网页抓取下来之后,下一步我们就应该解析网页,提取我们所需要的内容了,在p
- 注:本文针对单个服务器上多块GPU的使用,不是多服务器多GPU的使用。在一些实验中,由于Batch_size的限制或者希望提高训练速度等原因
- 本文记录,如何使用 Python 来抓取,图片或者文件的,创建日期,修改日期1. 读取照片创建日期(._getexif())from PIL
- 第一种:import socket import fcntl import struct def get_ip_address(ifname
- 在c语言中可以用system函数调用系统命令并得到输出,通过输出重定向也可以将程序执行的输出保存到文件以供使用,但用起来不是很方便。我这里介
- 本文意在弄清楚这些概念间的关系及其作用。弄清Mysql在开启事务的情况下,每条sql执行时的加锁操作和MVCC版本控制。为使讨论简单,本文忽
- 业务难点设计一个抽奖系统,这个系统并不是具体化,是抽象化,具有以下的几个难点:1、抽奖业务需要 复杂多变2、奖品类型和概率设置3、公平的抽奖
- 文章举例说明一下在 vue 中如何更好的监听浏览器事件。原文介绍了一种新增 vue 实例的方法,单独监听事件。这样代码书写较为简练,容易管理