【图】networkx笔记

一、创建有向图和无向图

(1)图的基本创建
import networkx as nx
# 无向图
G = nx.Graph() # 创建空的无向图
H = nx.Graph([(0,1),(1,2),(2,3)]) # 创建无向图时添加边

# 有向图
M = nx.DiGraph()

# 无向图转为有向图;
M = nx.DiGraph(H) 

# 默认建图函数
H = nx.path_graph(10) # 创建0-9的无向图,相邻相接
nx.add_path(G,[1,2,3,4])
G=nx.graph_atlas(100)
(2)图的属性
G=nx.Graph(day='Friday') # 设置图的属性
G.graph # 查看图的所有属性{'day': 'Friday'}
G.graph['day'] = 'Monday' # 修改图的某个属性
G.graph['name'] = 'time' # 增加图的属性

二、结点/边

(1)查看结点/边
# 结点
G.number_of_nodes() # 查看结点总个数
G.nodes() # 查看所有节点


# 边
G.number_of_edges() # 查看边总个数
G.edges() # 查看所有边


(2)添加删除结点/边
# 添加单个结点
G.add_node(1)
G.add_node('H')
G.add_node(H) 
# 添加多个结点
G.add_nodes_from([2,3])
G.add_nodes_from(H) # 等同于G.add_node(H)
G.add_nodes_from("abc") # 注意!添加的是元素a,元素b,元素c
# 删除单个节点
G.remove_node(1) # 1结点删除后,1的边也会被自动删掉
# 删除多个节点
G.remove_nodes_from(['b','c','d'])
G.remove_nodes_from("spam")

# 添加单个边
G.add_edge(1,2)
# 添加多个边或者某个图的边
G.add_edges_from([(1,2),(2,3)])
G.add_edges_from(H.edges())
# 删除单个边
G.remove_edge(2,3)
# 删除多个边
G.remove_edgesfrom([(2,3),(1,2)])
# 添加带权重的多个边
FG.add_weighted_edges_from([(1,2,0.125),(1,3,0.75),(2,4,1.2),(3,4,0.375)])



# 清空图
G.clear()
(3)结点/边的属性
# 边
G.add_edges_from([(3,'a',{'weight':10}), (4,'b',{'length':3})]) # 添加边时设置属性
G[1][3]['color']='blue' # 设置边(1,3)的color属性
G.edges[1,3] # 显示边(1,3)的所有属性,等同于G[1][2]
G.edges.data() # 显示所有边的属性信息
G.edges.data('weight') # 显示所有边的权重属性

# 结点
G.add_nodes_from([3],time='2pm') # 用列表添加多个节点时设置同一属性
G.add_node(1,time='5pm') 
G.nodes[1]['room']=714 # 给某个节点增加属性
G.adj[1] # 显示结点1的邻居,等同于G[1]
G.nodes.data() # 显示所有节点的属性信息


# 逐个遍历结点的所有邻居
for node,adjnodes in FG.adj.items():
	for adj,eattr in adjnodes.items():
		wt = eattr['weight']
		if wt<0.5:print('%d,%d,%.3f'%(node,adj,wt))

三、度与邻居

# 度(无向图没有出入度)
G.degree()[1] # 查看无向图结点1的度
G.in_degree(2)
G.out_degree(2)

DG=nx.DiGraph()
DG.add_weighted_edges_from([(1,2,0.5),(3,1,0.75)])
DG.out_degree(1,weight='weight') # 查看有向图1结点的出边权重
DG.degree(1,weight='weight')
DG.degree(weight='weight')

nx.degree_histogram(G) # 显示图各个度下的结点个数


# 邻居
G.adj[1] # 查看结点1的邻居,等同于G[1]
G.adj.items() # 返回字典,内容为所有节点各自的邻居集合
list(G.neighbors(0)) # 查看结点0的所有邻居
list(nx.common_neighbors(G,0,33)) # 查看两个结点的共同邻居

四、画图

import pylab
import networkx as nx
G = nx.karate_club_graph()
labels = {}
for node in G.nodes():
	labels[node] = str(node)
nx.draw(G,labels=labels)
pylab.show()

五、图的遍历搜索

# 深度优先
list(nx.dfs_edges(G,0))
# 先序遍历
list(nx.dfs_preorder_nodes(G,0))
# 后序遍历
list(nx.dfs_postorder_nodes(G,0))

参考:
https://www.csdn.net/tags/MtjaEg3sMTMyNTEtYmxvZwO0O0OO0O0O.html
https://wenku.baidu.com/view/b91b3612edfdc8d376eeaeaad1f34693daef1034.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值