1.假设我有一个无向有权网络,如下所示。v1表示起始节点,v2表示终节点,(v1,v2)表示从节点v1有一条边连接到v2,w为对应边的权重。如0 9 1.1表示从节点0有一条边连接到9,且这条边的权重为1.1。

v1  v2   w
0   9   1.1
0   3   0.1
4   5   1.5
4   8   1.4
5   7   0.1
5   8   0.1
7   8   1.5
6   7   1.4
6   8   1.5

使用matplotlib图形化显示为:

可以看见,节点编号从0开始,而且编号是间断的。

2.接下来,我们处理一下数据,使得节点编号从1开始,而且将节点连续。

注意,第一列是使用pandas时的索引,不是数据v1  v2    w
0   1   2  1.1
1   1   4  0.1
2   5   6  1.5
3   5   3  1.4
4   6   8  0.1
5   6   3  0.1
6   8   3  1.5
7   7   8  1.4
8   7   3  1.5

3.完整代码,注释很清楚。需要使用numpy,pandas,networkx,matplotlib。自己准备无向网络有权网络,调用的函数注意参数的含义,如sep='\t'为读取的数据文件分隔符是\t,有问题先查文档、百度。实在解决不了可以评论大家讨论。

import pandas as pd
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt# 如何减少循环内的运算量是提高程序运行效率应该注意的
# 处理网络,无向有权图。通过编程使节点从1开始编号,且节点编号连续。
# (注意,输入的网络为无向图,即(1,2)既代表(1,2),又代表(2,1),但是边列表里面只能出现(1,2),不能再出现(2,1),出现了你不就多此一举嘛)
# 当你做实验的时候一定要注意这个问题。# 统计网络的拓扑特性
fpaths = {'test': './undirected_weight/Test.txt','USAir': './undirected_weight/USAir.txt','Celegans': './undirected_weight/Celegans.txt','CGScience': './undirected_weight/CGScience.txt','NetScience': './undirected_weight/NetScience.txt',
}
# 获取数据
fname = 'test'
fpath = fpaths[fname]
data = pd.read_csv(filepath_or_buffer=fpath, sep='\t', header=None, names=['v1', 'v2', 'w'])# 获取边列表
edges = data.get(['v1', 'v2']).values# 图形化1
# g1 = nx.Graph()
# g1.add_edges_from(edges)
# nx.draw(g1, with_labels=True, edge_color="red", font_color="black")
# plt.show()# 节点从1开始编号
if np.any(edges == 0):edges = edges + 1# 假如nodes=[1,2,3,7,9],我想把它变成nodes=[1,2,3,4,5],即使得节点编号连续
max_node = np.max(edges)# 获取边对应的权重
weights = data.get(['w']).values# 原网络的节点(可能不连续)
nodes_source = np.sort(np.unique(edges))
len_ns = len(nodes_source)# 从1开始编号时,根据最大的那个节点,生成连续的网络节点列表
nodes_all = np.arange(1, max_node + 1, 1)# 从连续列表中找出除原始节点外不存在的节点。
# 如nodes_source=[ 1  4  5  6  7  8  9 10],nodes_all=[ 1  2  3  4  5  6  7  8  9 10],则找出nodes_notExist=[2 3]
mask = ~(np.isin(nodes_all, nodes_source))
nodes_notExist = nodes_all[mask]# 循环
while max_node != len_ns:# 这里的思想就是,将edges中最大的那个编号替换成nodes_notExist中最小的那个编号。循环之后,节点就能连续。# 开始循环之前,edges=[[ 1 10], [ 1  4], [ 5  6], [ 5  9], [ 6  8], [ 6  9], [ 8  9], [ 7  8], [ 7  9]],max_node=10,nodes_notExist=[2 3]# 开始循环,index就是edges中值为10的布尔索引,找到不存在的节点的最小值,min_nodes_notExist=2,将edges中的10换成2,# edges=[[1 2], [1 4], [5 6], [5 9], [6 8], [6 9], [8 9], [7 8], [7 9]],记录换之后的最大的节点编号,此时为max_node=9。# 2已经被替换了,从nodes_notExist中删除2,现在nodes_notExist剩下3,再次进入while循环。# 重复上面的工作,即,将edges中最大的那个编号替换成nodes_notExist中最小的那个编号index = (max_node == edges)min_nodes_notExist = np.min(nodes_notExist)edges[index] = min_nodes_notExistmax_node = np.max(edges)nodes_notExist = np.delete(nodes_notExist, 0, axis=0)df = pd.DataFrame()
df['v1'] = list(edges[:, 0])
df['v2'] = list(edges[:, 1])
df['w'] = weights
df.to_csv('./undirected_weight_standard/{fname}.txt'.format(fname=fname), encoding='utf-8', header=False, index=False, sep='\t')
print(df)# 图形化2
g2 = nx.Graph()
g2.add_edges_from(edges)
nx.draw(g2, with_labels=True, edge_color="black", font_color="red")
plt.show()

网络数据处理:将无向网络的编号从1开始,并使编号连续相关推荐

  1. Python网络编程之day01-网络编程基础

    Python网络编程之day01-网络编程基础 文章目录 Python网络编程之day01-网络编程基础 一.网络通信概述 二.IP地址 三.ping,ifconfig,ipconfig 四.端口 代 ...

  2. 网络监控软件百络网警 v6.6b 企业版 bt

    Welcome to my blog! <script language="javascript" src="http://avss.b15.cnwg.cn/cou ...

  3. word课程表设置符号与编号_Word2003文档怎么添加编号

    通给文档添加编号可以更加便捷的进行管理,Word2003文档添加编号的功能,有不少用户并不知道怎么使用,这里为大家介绍一下. Word2003文档添加编号 一.启动Word2003文档编辑软件,打开需 ...

  4. wps编号无法继续_wps怎么自动编号【解决步骤】

    我们在使用电脑工作的过程中时常会遇到各种奇奇怪怪的问题,比如最近就有不少用户来问小编关于wps怎么自动编号的问题,于是小编就在网上查了一下wps怎么自动编号的解决方法,其实wps怎么自动编号操作起来很 ...

  5. 中国线规(GB)编号与美国线规(AWG)编号对比(简洁版)

    中国线规(GB)编号与美国线规(AWG)编号对比 序号 CWG (mm^2)(详细版请点击访问) AWG 实际导体截面积 (mm^2) 1 0.05 30 0.05097 2 0.08 28 0.08 ...

  6. 在html中怎么去掉自动编号,Word怎么取消自动编号 烦人的Word自动编号如何取消?...

    Word怎么取消自动编号 烦人的Word自动编号如何取消?,最近到了季度汇报的时候,掌握一手word技能在此刻显得多么重要,为了是你的word看起来更高大上,今天教大家设置Word怎么取消自动编号,今 ...

  7. word编号技巧:如何将手动编号批量转为自动编号

    ​我们在制作Word文档的时候,总有需要编号的内容,但是,许多同学常会使用手动编号.不仅费劲,而且容易出错.一旦需要删除或者添加内容,就等于所有编号需要重新更改一遍,那酸爽,我相信经历过的人都懂. 案 ...

  8. html中如何去除编号点,如何去掉WORD自动编号后的小点。

    自动编号与后2113面语句有很大5261空格,于是调整文4102字位置(1653选择所需要改版动的部分,点"格式权"-"项目符号和编号"-点你需要的编号类型-& ...

  9. 算法题:150盏亮着的电灯,各有一个拉线开关控制,编号为1~150 将编号为1~150倍数的灯,依次拉一下 问:拉完后亮着的灯数为几盏? 哪盏灯被拉的最多?

    (以前写的东西,现在搬上来,现在变笨了,何解?/(ㄒoㄒ)/~~) 同学在朋友圈分享了一个问题,我试着写了下. 问题: 150盏亮着的电灯,各有一个拉线开关控制,编号为1-150 将编号为1-150倍 ...

最新文章

  1. android随手记
  2. python求分段函数值_高中数学知识点整理(2)——函数概念及基本初等函数篇(上)...
  3. linux内核唤醒过程,Linux内核启动过程分析
  4. Exchange 2010无法安装问题解决方法
  5. get,post请求的编码统一
  6. 暴走大侠显示进入服务器失败,暴走大侠:常见问题详解,再遇见这样的问题也不再迷糊...
  7. 注册表改win 7更新服务器,Win7 SP1 修改注册表升级的说明事项
  8. Python(65)_写函数,判断用户传入列表的长度,若大于2,则仅保留前两个长度的内容,并将其返回给调用者...
  9. 音频总线之I2S总线介绍及相关协议
  10. android手机开机密码,安卓手机锁屏密码忘了怎么办 锁屏密码解决方法
  11. 原生android ui设计,在拟物和扁平之间寻找平衡 原生安卓UI设计进化史
  12. ems与nms_告警处理方法、装置、nms、oss及ems的制作方法
  13. IP协议(网际协议)
  14. 特斯拉 开源_开源与癌症作斗争,特斯拉采用Coreboot,Uber和Lyft发行开源机器学习...
  15. 单片机/树莓派扩展双串口(TTL和RS485)
  16. excel2007整体调整行间距
  17. 闲人闲谈PS之三十一——新收入准则中的合同损失计提
  18. CactiEZ 中文版V10.1安装使用以及139邮箱短信报警设置
  19. 【计算机网络】思科实验(4):综合实验作业之办公室的跨VLAN通信
  20. NR 5G 终端TMSI上报

热门文章

  1. android获取录音读写权限设置,Android编程检测手机录音权限是否打开的方法
  2. 印度为何“盛产”CEO?
  3. 用行最简矩阵求矩阵的逆解矩阵方程
  4. 2019年5月30日:新坑C#
  5. 用鼠标滚轮滚动控制图片的缩小放大
  6. python多项式求导_链表 一元多项式求导
  7. Android Studio中高德地图的黑屏和白屏问题
  8. AI二次开发C#图形项
  9. Java求一组数中最大值的方法
  10. android 8.0.0-r1 源码编译遇到的问题build/core/main.mk:21: recipe for target 'run_soong_ui' failed 解决