
译Python之前您最好先安装一系列的开发工具和一些拓展库,虽然不是必须的,但这样Python才能凳盯依赖这些工具和拓展库弊猜展示它强悍的功能。下面是利
用yum进行工具和拓展库安装的示例命令,直接copy执行即可(注意部分命令显示不全,但可以通过移动光标查看和复制)。
yumgroupinstall"Development tools"
yuminstallzlib-develbzip2-developenssl-develncurses-develsqlite-develreadline-develtk-develgdbm-develdb4-devellibpcap-develxz-devel
该考虑的因素
在您编译和安装Python之前,有些东西您是应该知道或考虑的。如下。
Unicode编码
Python
编码问题历史悠久,但不用过多关注,知道它目前支持Unicode编码即可(Python3中默认的)。考虑到兼容性等原因,除非有特殊的理由,您最好配
置下Python 3.2和更早的版本,使其支持UTF-32编码,虽然会增加小小的内存代价。枣卜和
/etc/profile 在登录时首先自动执行。$HOME/.profile 在登录时第二个自动执行。
$ENV 在创建一个新的 KShell时指定要读的一个文件。
文件名元字符
* 匹配有零或零个以上字符的字符串
? 匹配任何单个字符
[abc…] 匹配括号内任何一个字符,也可用连字符指定一个范围(例如, a-z,A-Z,0-9)
[!abc…] 匹配任何不包括在括号内的字符
?(pattern) 匹配模式的零个或一个实例
*(pattern) 匹配指定模式的零个或多个实例
+ (pattern) 匹配指定模式的一个或多个实例
@ (pattern) 只匹配指定模式的一个实例
! (pattern) 匹配任何不匹配模式的字符串
\n 匹配与 (…)中的第 n个子模式匹配的文本。
~ 当前用户的主目录
~ name 用户 name的主目录
这个模式 pattern可能是由分隔符“ |”或“&”分隔的模式的序列,
例: pr !(*.o|core) | lp
引用
命令分隔符
& 后台执行
( ) 命令分组
| 管道
<>& 重定向符号
* ? [ ] ~ + - @ ! 文件名元字符
““ 中间的字符会逐字引用,除了 `` 替换命令和 $ 替换变量 .
‘’ 中间的所有字符都会逐字引用
\ 在其后的字符会按其原来的意义逐字采用 .如在 ””中使用 \”,\`,\$
\a 警告, \b退格 ,\f 换页 ,\n 换行 ,\r 回车 ,\ 制表符 ,\v 垂直制表符 ,
\nnn 八进制值 ,\xnn 十六进制值 ,\’ 单引号 ,\” 双引号 ,\\ 反斜线 ,
`` 命令的替换
$ 变量的替换
命令形式
Cmd & 在后台执行
Cmd1cmd2 命令序列,依次执行
{cmd1cmd2} 将命令做为一组来执行
(cmd1cmd2) 在子 shell中,将命令做为一组执行
Cmd1|cmd2 管道 将 cmd1的输出作为 cmd2的输入
Cmd1 `cmd2` 命令替换 用 cmd2的输出作为 cmd1的参数
Cmd1$(cmd2) 命令替换,可以嵌套
Cmd$((expression)) 运算替换。用表达式结果作为参数
Cmd1&&cmd2 逻辑与。如果 cmd1成功才执行 cmd2
Cmd1||cmd2 逻辑或。如果 cmd1成功则不会执行 cmd2
重定向形式
文件描述符:
0 标准输入 stdin 默认为键盘
1 标准输出 stdout
2 标准错误 stderr
Cmd >file 将 cmd的结果输出到 file(覆盖 )
Cmd >>file 将 cmd的结果输出到 file(追加 )
Cmd <file 从 file中获取 cmd 的输入
Cmd <<text 将 shell脚本的内容(直到遇见一个和纤信 text一样的标记为止)作为 cmd的输入
Cmd <>file 在标准输入上打开文件以便读写
Cmd >&n 将输出发送到文件描述符 n。 ll >&1
Cmd m>&n 将本来输出的 m中的内容转发到 n中。 Ll 3>&2
Cmd >&- 关闭标准输出
Cmd <&n 获取输入
Cmd m<&n
Cmd <&- 关闭标准输入
在文件描述符和一个重定向符号间不允许有空格。
Cmd 2>file 将扰竖埋标准错误发到 file中
Cmd >file 2>&1 将标准错误和标准输出都发到 file
Cmd >f1 2>f2 将标准输出发到 f1,标准错误发到 f2
Cmd | tee files 将输出发送到标准输出和 files中
Cmd 2>&1 | tee files 将输出和错误同时发到标准输出和 files中
2.变量
变量替换
下列表达式中不允许使用空格。冒号是可选的缓蚂,如果用冒号那么变量必须是非空的并设置了初始值。
Var=value… 将变量 var 设为 value
${var} 使用变量 var的值 如果变量和其后面的文本是分开的则可以不加大括号。
${var:-value} 如果变量 var已设置则使用它,否则使用值 value
${var:=value} 如果变量 var已设置则使用它,否则使用值 value并将 value赋给变量 var
${var:+value} 如果变量 var已设置则使用 value,否则什么也不使用
例 :echo ${u-$d}echo ${tmp-`date`}如果没设 tmp,则执行 date
内置变量
$# 命令行参数的个数
$? 上一条命令执行后返回的值
$$ 当前进程的进程号 (PID), 通常用于在 shell脚本中创建临时文件的名称
$0 第一个参数即命令名
$n 命令行上的第 n个参数
$* 将命令行上所有参数作为一个字符串
$@ 命令行上所有参数,但每个参数都被引号引起来
LINENO 脚本或函数内正在执行的命令的行号
OLDPWD 前一个工作目录(由 CD设置)
PPID当前 SHELL的父进程的进程号
PWD 当前工作目录(由 CD设置)
RANDOM[=n] 每次引用时产生一个随机数,如果给定 n则以整数 n开始
SECONDS 这个整型变量的值是指从这个 shell会话启动算起所过去的秒数。但它更有用的是用脚本中的计时。
例: start=$SECONDS
read answer
finish=$SECONDS
TMOUT 如果设置了该变量,则在没有输入的情况下经过 TMOUT变量所指定的秒数后, shell退出。值为 0时无效。
CDPATH
允许用户使用简单文件名作为 CD的参数,从而快速改变目录。设置方法与 PATH类似,通常在启动文件中设置。如果 CD的参数是一个绝对路径,则不会查询 CDPATH.
例: CDPATH=:/u1/nr:/u1/progs:
export CDPATH
cd nr
就会进到 nr中去。
注意:变量必须大写,定义后必须导出 .
数组
Kshell支持一维数组,最多支持 1024个元素。第一个元素为0。
Set –A name value0 value1 …
声明数组,指定的值就成为 name的元素。
${name[i]} i为 0至 1023的值,可以是表达式。返回数组元素 i
${name} 返回数组元素0
${name[*]},${name[@]} 返回所有元素
下标 [*]和 [@]都可以提取整个数组的内容。但当它们在引号中使用时其行为是不同的。使用 @可生成一个数组,这个数组是原始数组的副本,而使用 *,则生成的仅仅是具有单一元素的数组 (或者是一个普通变量 )。
例: set -A a "${names[*]}"
set -A b "${names[@]}"
set|head -5
a[0]='alex helen jenny scott'
b[0]=alex
b[1]=helen
b[2]=jenny
b[3]=scott
${#name[*]} 返回数组元素个数
运算符
Kshell使用 C语言中的运算符。
+ 加 - 减 ! 逻辑非 ~ 按进制取反 * 乘 / 除 % 求余 <<左移 >>右移 <= 小于等于 >= 大于等于 <小于
>大于 == 相等 != 不等 &&逻辑与 || 逻辑或
3.内置命令
# 注释后面的一行
Break [n] 从 for while select until循环中退出或从 n次循环中退出
Case value in
Pattern1) cmds1
Pattern2) cmds2
…
…
Esac
类似于 select case.例 :
Case $<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />1 in
No|yea) response=1
break
-[tT]) table=TRUE
*) echo “unknown option”exit 1
Esac
Continue [n] 在 for while select until循环中跳过余下的命令,继续下一次循环 (或跳过 n次循环 )
Eval args args是一行包含 shell变量的代码 .eval首先进行变量扩展,并且运行由此产生的命令。在 shell变量包括了重定向符号,别名或其他变量时是有用的。
例 :
For option
Do
Case “$option” in
Save) out=’ >$newfile’
Show) out=’ | more’
Esac
Done
Eval sort $file $out
Exit [n] 退出脚本,退出状态为 n.
Export [name=[value]…]
定义全局变量,让其它 shell脚本也可以使用。无参数时输出当前定义的全局变量。
For x [in list]
Do
Commands
Done
使变量 x(在可选的值列表中 )执行 commands,省略时假定为 ”$@”位置参数
例 :
For item in `cat program_list`
Do
Grep –c “$item.[co]” chap*
Done
Function name{commands} 定义一个函数
If condition1
Then commands1
[elif condition2
Then commands2]
…
…
[else commands3]
Fi
条件执行语句。
Let expressions 执行一个或多个表达式。表达式中的变量前不必有 $.如果表达式中包含了空格或其他特殊字符,则必须引起来。
例: let “I = I + 1”或 let i=i+1
Read [var1[?string]] [var2 …] 从标准输入读入一行给相应的变量,并把剩余的单词给最后一个变量。 String为相应的提示信息 .无参时只等待一次输入。
Readonly [var1[=value] var2[=value] …] 设置只读变量 ,无参时显示所有只读变量
Return [n] 用于一个函数里面返回状态
repeat word
do
commands
done
指定一个命令序列执行的次数。
例:
repeat 3
do
echo "bye"
done
Select x [in list]
Do
Commands
Done
显示一列按 list中顺序编号的菜单项。让用户键入行号选择或按 return重新显示。
例 :
Ps3=”select thd item number:”
Select event in format page view exit
Do
Case “event” in
Format) nroff $file | lp
Page) pr $file | lp
View) more $file
Exit) exit 0
*)echo “invalid selection”
Esac
Done
输出为 :
1. format
2. page
3. view
4. exit
select the item number:
set [options arg1 arg2 …] 无参时输出所有已知变量的值。
Shift [n] 交换位置参数(如将 $2变为 $1) .如果给出 n,则向左移动 n个位置。通常用于在 while循环中迭代命令行参数。 N可以是一个整数表达式。
Sleep [n] 睡眠 n秒钟
Test condition 或 [ condition ] 判断条件,为真返回 0,否则返回非 0.
文件:
-a filename 如果该文件存在而为真
-d filename 如果该文件存在且为一个目录,则为真
-f filename 如果该文件存在且为一个常规文件,则为真
-L filename 如果该文件存在且为一个符号链接,为真
-r filename 如果该文件存在且用户对其有读取权限,真
-s filename 如果该文件存在且包含信息 (大于 0字节 ),真
-w filename 如果该文件存在且对其有写入权,真
-x filename 如果该文件存在且对其有执行权,真
File1 -nt file2 如果 file1存在且在 file2后修改则值为真 (指修改时间 )
File1 -ot file2 如果 file1存在且在 file2前修改则值为真 (指修改时间 )
字符串:
string 如果 string不为空字符串则值为真
-n string 如果 string字符长度大于 0则值为真
-z string 如果 string字符长度等于 0则值为真
string1=sting2 如果 string1等于 string2则值为真
string1!=string2如果 string1不等于 string2则值为真
string2可以是通配符模式。
整数比较:
-gt 大于; -ge 大于或等于; -eq 等于; -ne 不等于 -le 小于或等于 -lt 小于
组合:
! condition 如果 condition为假则为真
condition1 –a condition2 如果两个条件都为真则为真
condition1 –o condition2 如果两个条件有一个为真则为真
trap [[commands] signals] 如果接收到任何的信号 signals则执行命令 commands.如果完全忽略 commands则会重新设置由默认行为处理指定的信号。
例:
Trap “” 2 忽略信号 2(中断,通常是 ctrl+c)
Trap 2 恢复中断 2
Trap “rm –f $tmpexit” 0 1 2 15 当 shell程序退出,用户退出,按 ctrl+c或执行 kill时删除 $tmp.
Typeset [options] [var [var]…]设置变量属性
-u 将变量值中所有字母全部转换成大写
-l 将变量值中所有字母全部转换成小写
-i 将变量值设为整数类型 .-ix x为相应的进制,表示时为 x#变量值,可用于进制转换。
例: typeset -i2 vv vv=2echo $vv2#10
typeset -i 相当于 integer
-L width 在 width宽度之内左对齐
-R width 在 width宽度之内右对齐,前面空位用空格填充
-Z width 在 width宽度之内右对齐,变量如果是数字,则前面空位用零填充
如果忽略 width,将使用赋给这个变量的第一个值的宽度。
-x 设置一个变量全局。 typeset -x 相当于 export
-r 设置一个变量具有只读属性,在设置的同时或之前,要先给这些变量赋值。
例: typeset -r PATH FPATH=/usr/local/funcs
typeset -r 相当于 readonly
不带参数的 typeset可以列出变量和变量的属性。查看指定的变量属性可用 type|grep day
使用带有某一选项的 typeset来看看哪一个变量具有特定的属性: typeset -z
Unset var 删除一个变量,将它置为空
Until condition
Do
Commands
Done
执行命令 command直到满足条件 condition.
While condition
Do
Commands
Done
如果满足条件 condition则执行 commands
转载于:https://blog.51cto.com/gobdle/128601
相关资源:Kshell基础_kshell-Linux文档类资源-CSDN文库
原文链接:http://blog.51cto.com/gobdle/128601
文章知识点与官方知识档案匹配
C技能树首页概览
115478 人正在系统学习中
点击阅读全文
打开CSDN APP,看更多技术内容
社团检测之K-Shell算法_梦家的博客_k-shell算法
K-shell 方法递归地剥离网络中度数小于或等于 k 的节点,具体划分过程如下: 假设网络中不存在度数为 0 的孤立节点。从度指标的角度分析,度数为 1的节点是网络中最不重要的节点,因此首先将度数为 1 的节点及其连边从网络中删除。删除...
继续访问
...复杂网络中有影响力的重要节点_7:45am的博客_kshell...
改进的k-shell指标通过考虑从目标节点到网络核心的最短距离,该网络核心被定义为具有最高k-shell值的节点集。拥有相同k-shell数量的节点影响力被定义为: 其中,k s m a x ks_{max}ksmax是最大的k-shell,S c S_cSc是拥...
继续访问
K shell基础
K shell 精简教程,立马上手,让你发现k shell 如此简单
(python)改进的重力kshell的关键节点识别算法(KSGC)复现
一.算法介绍 KSGC是一种基于重力公式的关键节点识别方法(三步) 1.计算系数 2.重力公式 3.整体算法 二.代码 import networkx as nx import math def kshell(G): graph = G.copy() importance_dict={} level=1 while len(graph.degree): importance_dict[level]=[] while True:
继续访问
python实现k-shell复杂网络_10大必知的顶级python库_weixin_39867708的博...
作为数据科学和机器学习相关的研究和开发人员,大家每天都要用到 python。在本文中,我们将讨论一些 python 中的顶级库,开发人员可以使用这些库在现有的应用程序中应用、清洗和表示数据,并进行机器学习研究。我们将讨论以下 10 个库:...
继续访问
(python)改进的k-shell算法来识别关键节点 The improved k-shell...
k-shell算法中很多节点的kshell值相同,无法区分它们的重要性,因此对k-shell算法进行了改进,提出了IKS算法 二.算法思路 熵是用来表示信息的不确定性,熵越大表示信息的不确定性越大。 这篇文章将熵扩展到了复杂网络中,称为节点信息熵...
继续访问
解释 kshell语法中 双引号“”单引号 ‘’ 和反斜杠\ 的作用以及执行规则
解释 1.双引号““,使包含在里边的字符串失去意义,不起作用,除了四个字符$ ` " 和\外。 2.单引号 ` `,使包含在里边的字符串失去意义,不起作用。 3.反斜杠 \,使紧跟在 \后面的字符正常显示,转义符。 1.Example $ s=“hello” # assign a value to a variable $ print “$s” # output the value
继续访问
K-shell算法的简单实现(python)
k-shell的基本思想:K-shell 方法递归地剥离网络中度数等于 k 的节点,我们让k值为1,不断地让节点的度数值与其相比较,如果等于那么我们就将该节点从网络中剥离出去,然后继续重复比较和剥离的过程,直到度数值都不等于k,这就意味着我们需要将k增大,然后再 重复比较剥离和k值增大的过程。简单实现:# ks代表了一个简单的网络,里面由三个节点‘1’,‘2’,‘4’ ks={'1':['3','...
继续访问
K-Core, K-Shell &K-Crust傻傻分不清楚_siyan985的博客_k核...
而K-Shell由属于k-core但不属于(k+1)-core的结点和连边组成。比如,0-core就是整个图,因为每个结点的度都至少大于01-core就是把所有孤立结点丢掉,这样图中结点度都大于等于1. 0-shell就是那些孤立的结点组成的子图。
继续访问
(python编程)k-shell的实现
实现k-shell代码 def kshell(graph): importance_dict = {} ks = 1 while graph.nodes(): temp = [] node_degrees_dict = {} for i in G.degree(): node_degrees_dict[i[0]]=i[1] kks = min(node_degrees_dict.values.
继续访问
复杂网络K-Shell算法及其Python实现
The rest of the world may follow the rules,but i must follow my heart! 随心所欲即使其他人随波逐流。 K-Shell算法基本思想K-shell 方法递归地剥离网络中度数小于或等于 k 的节点,具体划分过程如下: 假设网络中不存在度数为 0 的孤立节点。从度指标的角度分析,度数为 1的节点是网络中最不重要的节点,因此首先将
继续访问
k-shell分解算法
K-shell 分解方法给出了节点重要性的一种粗粒化的划分。 其基本思想如下,假设边缘节点的 K-shell值为 1,然后往内一层层进入网络的核心,先去除网络 中度值等于 1 的所有节点以及连边。 若剩下的节点里面,仍有度值等于 1 的节点,则重复上述 *** 作,即去除这些节点和连边,直至所有节点的度值都大于 1,把这些去除的节点的 K-shell 值记为 1,也就是说这些节点均处于 ks 值为 1 的层。 然后依次去除度值小于或等于k 的节点及连边(k 为整数,k≥2),直到所有的节点都有对应的 ks 值为止。
shell脚本 read file
echo "" >$3 while read srcline d...
继续访问
shell使用中用到得参数详解(包括if中参数)(20200604更新)
1.shell脚本if判断变量介绍 [ -a FILE ] 如果 FILE 存在则为真 [ -b FILE ] 如果 FILE 存在且是一个块特殊文件则为真 [ -c FILE ] 如果 FILE 存在且是一个字特殊文件则为真 [ -e FILE ] 如果 FILE 存在则为真 [ -f FILE ] 如果 FILE 存在且是一个普通文件则为真 [ -g FILE ] 如果 FILE 存在且已经设置了SGID则为真 [ -h FILE ] 如果 FILE 存在且是一个符号连接则为真 [ -k FILE ]
继续访问
最新发布 Shell编程语法
shell编程的语法
继续访问
怎么写第一个kshell 以及如何执行kshell
如何写一个标准的kshell #cat helloworld.ksh #!/bin/usr/ksh print "hello world ,kshell" 如何执行shell #ksh helloworld.ksh hello world,kshell 或者 #./helloworld.ksh #需要执行权限x 如何查看执行结果 #print "$?" #打印出执行
继续访问
R语言-关键节点问题-方案四-K-shell分解法
K-shell分解法,O(N) step 1 查找网络中所有度为1的节点,并将这些节点及连接的边去掉。 step 2 经过步骤1后,网络中可能会出现新的度为1的节点,循环执行步骤1,直至所剩的网络中没有度为1的节点为止。 step 3 去掉网络中剩余度为2的节点,一次类推,重复循环执行。 step 4 重复以上 *** 作,直至网络中没有节点为
继续访问
热门推荐 shell脚本基本语法详解
编写shell脚本的时候,最前面要加上一行:#!/bin/bash,因为linux里面不仅仅只有bash一个解析器,还有其它的,它们之间的语法会有一些不同,所以最好加上这一句话,告诉系统要用这个解析器。一.shell变量shell变量和一些编程语言不同,一般shell的变量赋值的时候不用带“$”,而使用或者输出的时候要带“$”。加减乘除的时候要加两层小括号。括号外面要有一个“$”,括号里面的变量可以
继续访问
k-shell的python实现
import networkx as nx import matplotlib.pyplot as plt def get_K_sehll(G): # 为了不改变原图 graph = G.copy() k_shells = [] # k从最小度开始 degrees = (graph.degree[n] for n in graph.nodes()) k = min(degrees) while nx.number_of_nodes(graph)
继续访问
shell 中 '>' 与‘>>’ 的区别
在shell中 '>' 为创建: echo “hello shell” >out.txt '>>' 为追加:echo “hello shell” >>out.txt 当out.txt 文本不存在时,'>'与‘>>’都会默认创建out.txt文本,并将hello shell 字符串保存到out.txt中 当out.txt文本存在...
继续访问
这是我见过最牛逼的Shell脚本!
#!/bin/bash APP_NAME=&quot${0##*[\\/]}&quotAPP_VERSION=&quot1.0&quot#颜色定义 iSumColor=7 #颜色总数 cRed=1 #红色 cGreen=2 #绿色 cYellow=3 #黄色 cBlue=4 #蓝色 cFuchsia=5 #紫红色 cCyan=6 #青色(蓝绿色) cWhite=7
继续访问
k-core与k-shell的区别
一、问题描述: 在文章中看到k-core与k-shell的概念,将全局图中分成2-core与1-shell的概念? 结论: 图可以说明一切,如图所示: 1、2-core是包含蓝色与绿色的点,3-core会包含全部的点 2、1-shell指的是黄色的点 3、推断:任何一个图均可以分成k-core图与(k-1)-shell ...
继续访问
Shell脚本中$0、$?、$!、$$、$*、$#、$@等的意义
变量说明 $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行的命令的结束代码(返回值) $- 使用Set命令设定的Flag一览 $* 所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2 … $n"的形式输出所有参数。 $@ 所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2"
继续访问
【shell脚本】shell脚本的三个小练习
1.利用shell脚本编写一个进度条 先介绍一下shell中printf命令的使用方法,与C语言风格类似,只不过在shell中是一个命令,所以不能通过圆括号传参,所有的参数用双引号括起来,第一个参数是格式控制,与C一致,参数之间不能用逗号,像命令传参一样,用空格隔开。 为了进度条能稍微美观一点,我们可以设置字体的颜色和背景色。在shell中,怎么做到呢? 颜色是通过添加专
继续访问
Shell脚本学习(一)Shell命令基础
Shell脚本学习(一)Shell命令基础
继续访问
k shell
shell
c/c++
K-shell 方法递归地剥离网络中度数等于 k 的节点,我们让k值为1,不断地让节点的度数值与其相比较,如果等于那么我们就将该节点从网络中剥离出去,然后继续重复比较和剥离的过程,直到度数值都不等于k,这就意味着我们需要将k增大,然后再 重复比较剥离和k值增大的过程。
简单实现:
# ks代表了一个简单的网络,里面由三个节点‘1’,‘2’,‘4’
ks={'1':['3','4'],'2':['1'],'4':['2','1']}
#ks1暂时存储我们的查询结果
ks1=[]
#k值的初始值为s=1
s=1
while ks:
#根据度数值是否和s相等,将找到的节点存入ks1
for k,v in ks.items():
if len(v)==s:
ks1.append(k)
#判断是否ks1是否含有值,如果含有即代表s不用增加,否则是s+1
if ks1!=None:
for k2 in ks1:
#如果记录的节点在网络中,则删除
if k2 in ks:
ks.pop(k2)
#删除的那个节点不应该出现在网络节点的度数中,所以我们要移除
for v in ks.values():
if k2 in v:
v.remove(k2)
else:
s+=1
#每一次进行完上面的代码都要进行一次清空 ,为下次判断是否为None做好条件
ks1.clear()
print(s)
近年来,全球大数据进入加速发展时期,数据量呈现指数级爆发式增长,而这些大量数据中不同个体间交互产生的数据以图的形式表现,如何高效地处理这些图数据成为了业界及其关心的问题。很过用普通关系数据无法跑出来的结果,用图数据进行关联分析会显得异常高效。提到处理图数据,我们首先想到NetworkX,这是网络计算上常用的Python包,可提供灵活的图构建、分析功能。但是我们使用NetworkX跑大规模图数据时,不仅经常碰到内存不足的问题,而且分析速度很慢,究其原因,是NetworkX只支持单机运行。通过网上搜索,新发现了一个名为GraphScope的系统不仅迹坦号称兼容NetworkX的API,而且支持分布式部署运行,性能更优。针对GraphScope和NetworkX的处理能力,我们参考图计算中常用的测试框架LDBC,通过一组实验来对比下二者的性能。
一、实验介绍
为了比较两者的计算效率,先用阿里云拉起了配置为8核CPU,32GB内存的四台ECS,设计了三组比较实验,分别是NetworkX单机下的计算性能,GraphScope单机多worker的计算性能以及GraphScope分布式多机多worer的计算性能。
数据上,我们选取了SNAP开源的图含运数据集twitter,来自 LDBC数据集的datagen-7_5-fb,datagen-7_7-zf和datagen-8_0-fb作为实验数据,以下是数据集的基本信息:
· Twitter: 81,307个顶点,1,768,135条边
· Datagen-7_5-fb: 633,432个顶点,34,185,747条边,稠密图
· Datagen-7_7-zf: 13,180,508个顶点,32,791,267条边,稀疏图
· Datagen-8_0-fb: 1,706,561个顶点,107,507,376条边,这个数据集主要测试两个系统可处理的图规模能力
实验设计上我选择常用的SSSP、BFS、PageRank、WCC算法,以及较高复杂度的All Pair shortest Path length算法,以载图时间,内存占用和计算时间这三个指标为依据,对两个系统进行计算性能的比较。
NetworkX是一个单机系统,在实验中只考虑NetworkX在单机环境下的运行时间;GraphScope支持分布式运行,故进行两个配置,一个是单机4worker,另外一个配置是4台机器,每台机器4个worker。
二、实验结果
首先,GraphScope的载图速度比NetworkX显著提升。
在前三个图数据集中,无论是GraphScope的单机多worker模式,还是GraphScope的分布式模式,载图速度都比NetworkX快:
GraphScope单机模式载图速度姿老桐平均比NetworkX快5倍,最高纪录——在datagen-7_5-fb上比NetworkX快了6倍。
分布式模式下GraphScope的载图时间比NetworkX平均快了27倍,最高纪录——在datagen-7_7-zf数据集上比NetworkX快了63倍。
在datagen-8_0-fb数据集上,NetworkX因内存溢出无法载图,GraphScope单机多worker和GraphScope分布式载图时间分别为142秒和13.6秒。
表一:载图时间对比
载图时间
NetworkX
GraphScope单机
GraphScope分布式
11.2
3.1
1.8
datagen-7_5-fb
256
45.6
36.6
datagen-7_7-zf
316
71.3
50
datagen-8_0-fb
OOM
142
13.6
其次,GraphScope的内存使用效率比NetworkX显著提升。
在datagen-8_0-fb数据集上,NetworkX在32G的内存上无法载完图,而GraphScope仅需要24G的内存即可载入在datagen-8_0-fb数据集。
表二:内存占用对比
内存占用
NetworkX
GraphScope
datagen-7_5-fb
14G
6G
datagen-7_7-zf
28G
18G
datagen-8_0-fb
OOM
24G
再次,GraphScope的计算速度比NetworkX显著提升。
SSSP算法上,GraphScope单机多worker模式平均要比NetworkX快22倍,最快在datagen-7_7-zf数据集上快了32倍。GraphScope分布式模式下平均要比NetworkX快103倍,最快datagen-7_5-fb数据集上快了182倍。
表三: SSSP计算时间对比(单位:秒)
SSSP
NetworkX
GraphScope单机
GraphScope分布式
2.45
1.32
0.28
datagen-7_5-fb
37.9
1.21
0.31
datagen-7_7-zf
5.84
0.18
0.03
datagen-8_0-fb
OOM
2.76
0.82
BFS算法上,GraphScope单机多worker模式平均要比NetworkX快13倍,最快datagen-7_5-fb数据集上快了22倍。GraphScope分布式模式下平均要比NetworkX快16倍,最快在datagen-7_5-fb数据集上快了28倍。
表四: BFS计算时间对比(单位:秒)
BFS
NetworkX
GraphScope单机
GraphScope分布式
1.53
0.16
0.17
datagen-7_5-fb
44.68
2.52
1.56
datagen-7_7-zf
7.98
0.75
0.72
datagen-8_0-fb
OOM
11.02
5.73
PageRank算法上,GraphScope单机多worker模式平均要比NetworkX快62倍,最快twitter数据集上快了80倍。GraphScope分布式模式下平均要比NetworkX快65倍,最快在twitter数据集上快了71倍。
另外,PageRank计算过程中,NetworkX在datagen-7_7-zf上内存溢出,没有完成计算,GraphScope单机多worker模式和分布式模式计算时间分别为25秒和22秒;
表五:PageRank计算时间对比(单位:秒)
PageRank
NetworkX
GraphScope单机
GraphScope分布式
24.01
0.37
0.33
datagen-7_5-fb
300
6.73
5.17
datagen-7_7-zf
OOM
19.31
7.79
datagen-8_0-fb
OOM
24.96
21.88
WCC算法上,GraphScope单机多worker模式平均要比NetworkX快44倍,最快在datagen-7_7-zf数据集上快了104倍。GraphScope分布式模式下平均要比NetworkX快76倍,最快datagen-7_5-fb数据集上快了194倍。
表六: WCC计算时间对比(单位:秒)
WCC
NetworkX
GraphScope单机
GraphScope分布式
0.6392
0.0296
0.0233
datagen-7_5-fb
26.03
0.25
0.13
datagen-7_7-zf
83.19
14.57
12.98
datagen-8_0-fb
OOM
0.34
0.4991
在复杂度极高的All pair shortest path length算法上,NetworkX在twitter图上即内存溢出,无法计算。GraphScope在分布式模式下完成了twitter图的All pair shortest path length计算,耗时76分钟。
表七: All Pair Shortest Path Length(单位:秒)
APSP
NetworkX
GraphScope单机
GraphScope分布式
OOM
OOM
4575.87
三、总结
从实验结果可以看到,在同等条件下,无论在载图时间、内存占用和计算时间上,GraphScope都要大大优于NetworkX,性能优化可以达到几十倍甚至上百倍。
6979阿强
关注
0
0
0
@网络算法工具 networkX igraph 的性能问题
alston_ethannical的博客
24
@网络算法工具 networkX igraph 的性能问题 问题的提出 当我用 50万数据去跑 networkX 开发出来的算法时,遇到了一个计算性能的问题,这个问题时很慢。 寻找答案 发现 networkX再性能方面比较差。当节点上万,边上十万的时候,新能慢的问题就会显现出来 为了解决图算法问题,该怎么办呢 遇到问题,首先定义问题的边界。也就是 先找到限制问题的条件。然后缩小问题范围。我要解决的问题是:在解决图算法相关的问题时,如何能够快速计算出结果。但是目前的算法时用networks实现的。问题的根源是
开源!一文了解阿里一站式图计算平台GraphScope
阿里云开发者
2767
简介:随着大数据的爆发,图数据的应用规模不断增长,现有的图计算系统仍然存在一定的局限。阿里巴巴拥有全球最大的商品知识图谱,在丰富的图场景和真实应用的驱动下,阿里巴巴达摩院智能计算实验室研发并开源了全球首个一站式超大规模分布式图计算平台GraphScope,并入选中国科学技术协会“科创中国”平台。本文详解图计算的原理和应用及GraphScope的架构设计。一 什么是图计算图数据对一组对象(顶点)及其关系(边)进行建模,可以直观、自然地表示现实世界中各种实体对象以及它们之间的关系。在大数据场景下,社交网络、交
一文了解阿里一站式图计算平台GraphScope_阿里云云栖号
10-2
GraphScope 提供了各类常用的分析算法,包括连通性计算类、社区发现类和 PageRank、中心度等数值计算类的算法,后续会不断扩展算法包,在超大规模图上提供与 NetworkX 算法库兼容的分析能力。此外也提供了丰富的图学习算法包,内置支持 Graph...
5大典型模型测试单机训练速度超对标框架,飞桨如何做到...
10-28
导读:飞桨(PaddlePaddle)致力于让深度学习技术的创新与应用更简单。在单机训练速度方面,通过高并行、低开销的异步执行策略和高效率的核心算子,优化静态图训练性能,在Paddle Fluid v1.5.0的基准测试中,在7个典型模型上进行了测试(图像领域...
强化学习经典算法笔记(六):深度Q值网络 Deep Q Network
hhy_csdn的博客
9093
前期回顾 强化学习经典算法笔记(零):贝尔曼方程的推导 强化学习经典算法笔记(一):价值迭代算法Value Iteration 强化学习经典算法笔记(二):策略迭代算法Policy Iteration 强化学习经典算法笔记(三):蒙特卡罗方法Monte Calo Method 强化学习经典算法笔记(四):时间差分算法Temporal Difference(Q-Learning算法) 强化学习经典算...
GraphX和GraphFrame connectedComponent计算性能对比
高臭臭的博客
3046
测试文件:用Graph rmatGraph 1000000 2000000 去重后 494587个点,1997743个边 运行环境:三台服务器,246 GB,core 71. 测试三个运行例子1:Graph connectedComponents 2:GraphFrame connectedComponents 3:GraphFrame connectedComponents setAlgor
...network、伪代码、算法理解、代码实现、tensorboard...
11-3
定义一个q_network函数来构建Q network,输入游戏状态Q network并得到对所有动作的Q值。 网络构成给为三个带有池化的卷积层和一个全连接层。 tf.reset_default_graph()defq_network(X,name_scope):# Initialize layersinitializer=tf....
【读书笔记】【机器学习实战】第十一章:训练深度神经网络
MJ_Lee的博客
612
阅读书籍为《Hands-On Machine Learning with Scikit-Learn &TensorFlow》王静源等翻译的中文译版《机器学习实战,基于 Scikit-Learn 和 TensorFlow》,本文中所有图片均来自于书籍相关部分截图。 本章介绍了DNN训练过程中三个常见问题,并依次给出解决方案。 章节的最后还给出当不知道如何DNN训练时一些属性可以选的比较好的...
Networkx 计算网络效率
tengqingyong的博客
5860
本人在计算网络效率的时候遇到了一个问题 networkx 提供了最短路径函数shortest_path及shorest_path_length 我在计算网络效率构造了一个无向图,但是我在计算点与点之间的最短路径长度时总是提示我说点不存在图中, 我在上面使用nx.average_shortest_path_length(UG)的时候可以得到网络平均最短路径长度;这个说明我的点都...
Pandas/networkx图分析简单入门
weixin_34306676的博客
516
对于图论而言,大家或多或少有些了解,数学专业或计算机相关专业的读者可能对其更加清楚。图论中的图像是由若干给定的点及连接两点的线所构成的图形,这样的图像通常用来描述某些事物之间的某种特定关系,用点代表事物,用两点之间的连接线表示二者具有的某种关系,在互联网与通信行业中应用广泛。图论分析(Graph analysis)并不是数据科学领域中的新分...
networkx--四种网络模型
weixin_30764883的博客
380
NetworkX提供了4种常见网络的建模方法,分别是:规则图,ER随机图,WS小世界网络和BA无标度网络。 一. 规则图 规则图差不多是最没有复杂性的一类图,random_graphs.random_regular_graph(d, n)方法可以生成一个含有n个节点,每个节点有d个邻居节点的规则图。 下面一段示例代码,生成了包含20个节点、每个节点有3个邻居的规则...
igraph/networkx学习笔记之…
nuoline的专栏
1万+
原文地址:—— 数据结构">igraph/networkx学习笔记之一 —— 数据结构作者:zhengw789 首先,基本上所有的graph library都有其局限性,不同的数据结构有优点的同时必然有缺点,图算法对数据结构的依赖性构成另一个原因。所以如果是想用一个工具包解决所有的问题显然是一种奢望,很多时候甚至必须要从头写自己的代码。但是阅读igraph和networkx这样成型了的函数库对熟悉
python下的复杂网络编程包networkx的使用(摘抄)
weixin_30631587的博客
2335
原文:http://blog.sciencenet.cn/home.php?mod=space&uid=404069&do=blog&classid=141080&view=me&from=space 复杂网络分析库NetworkX学习笔记(1):入门 NetworkX是一个用Python语言开发的图论与复杂网络建模工具,内置了常用的图与复杂网...
更快更简单|飞桨PaddlePaddle单机训练速度优化最佳实践
PaddlePaddle
1672
导读:飞桨(PaddlePaddle)致力于让深度学习技术的创新与应用更简单。在单机训练速度方面,通过高并行、低开销的异步执行策略和高效率的核心算子,优化静态图训练性能,...
GraphX与GraphLab、Pregel的对比
yang灬仔
588
分布式批同步BSP Pregel、GraphLab、GraphX都是基于BSP(Bulk Synchronous Parallel)模式,即整体同步并行。一次计算过程由一系列全局超步组成,每一个超步由并发计算、通信和同步三个步骤组成。从垂直上看,一个程序由一系列串行的超步组成。从水平上看,在一个超步中,所有的进程并行执行局部计算。BSP最大的好处是编程简单,但在某些情况下BSP运算的性能非常差,...
TensorFlow学习记录:VGGNet卷积神经网络模型
weixin_41137655的博客
308
1.VGGNet模型结构简介 VGGNet是由牛津大学计算机视觉几何组(Visual Geomety Group,VGG)和Google Deepmind公司的研究员合作研发的深度卷积神经网络,VGG的成员Karen Simonyan和Andrew Zisserman在2014年撰写的论文《Very Deep Convolutional Networks for Large-Scale Image...
11月编程语言排行冠军揭晓,稳
热门推荐
IT教育任姐姐的博客
4万+
大家好 今天任姐姐要跟小伙伴们分享 2021年11月最新TIOBE指数 11月编程排行榜 Python继续榜首 本月的幸运儿只有一个,那就是Python! 继上个月我们见证了Python夺冠这一历史性的画面之后,这个月Python仍旧稳坐榜首,看来Python这股大风还在继续刮。 随后分别是 C、Java、C++、C#,这些也都是我们的老朋友了。 PHP即将跌出前十 自20多年前TIOBE 指数开始发布以来,PHP 一直常驻在榜单前十,然而最近,该语言已经开始在前十
python能做什么软件?Python到底能干嘛,一文看懂
小分享
6573
Python培训有哪些内容?很多零基础学员不知道Python软件是干什么用的?Python软件是Python工程师编写代码时所需要的编辑工具,现在比较常用的Python软件有Visu... 那么在选择Python培训机构时学生尤为关注的就是培训内容,从现在几家大的机构可以看出,Python培训主要学习第一阶段Python核心编程(Pyth... 一文读懂Python内置变量,函数,模块在这里解释下什么是解释性语言什么是编译性语言: 编译性语言:如c++,c等,写好的代码要通过编译器编译成 *** 作系统直接可
Django中超级用户的创建和删除 *** 作
最新发布
Protinx的博客
91
创建超级用户 这就很easy了,毕竟这是所有初学者都会的, *** 作如下: 打开Terminal,输入: python manage.py createsuperuser 然后按照提示输入相应的用户名、邮箱和密码就可以啦,如下: 创建超级用户 可以看到上面我的密码输入了三次,还有不成功的提示,Django本身对于超级用户的密码要求还是很多的,大家定义密码要注意啊,或者如果只是自己学习的话,也可在‘Bypass password validation and create user an.
上海python培训中心
weixin_63757190的博客
166
前几天,有个读者在后台留言,说: “最近被论文折磨得快崩溃了,我现在是恨不得克隆十个自己,一个呆在科室值班,一个去写月底要送审的稿子,一个去上百个网站翻数据..... 还有另外七个“我”,这边六七篇论文还没搞定。那边又有新论文要开题了,加上最后一个“本我”,刚刚够用,我可真是个数学天才! 可现实是只有一个我,只能天天熬夜。 好家伙,整得我都开始反问自己,是不是只有我的科研生活这么兵荒马乱?” 其实他不是个例,成千上万的科研人都要面对无尽的实验分析、反复修改的论文。 难道就只有被虐的份吗?
python装饰器
Live&Learn的博客
1208
学习目标:一口气把装饰器描述清楚 弄清楚装饰器前要理解三个东西: 函数对象、函数嵌套、函数构成闭包。 学习内容: 函数对象好说,python编程语言属于动态语言,python中一切皆对象,所以函数也是对象。 函数对象用函数名称表示(仅名称,没有括号,也没有参数)。 例如,定义了一个求和函数add,那么此处的add就是个函数对象。 def add(username, a, b): print(f"{a}+{b}={a + b}") return a + b 函数嵌套或者嵌套函数,就是定
©️2021 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页
关于我们
招贤纳士
广告服务
开发助手
400-660-0108
kefu@csdn.net
在线客服
工作时间 8:30-22:00
公安备案号11010502030143
京ICP备19004658号
京网文〔2020〕1039-165号
经营性网站备案信息
北京互联网违法和不良信息举报中心
网络110报警服务
中国互联网举报中心
家长监护
Chrome商店下载
©1999-2021北京创新乐知网络技术有限公司
版权与免责声明
版权申诉
出版物许可证
营业执照
6979阿强
码龄0年
暂无认证
11
原创
13万+
周排名
12万+
总排名
579
访问
等级
132
积分
1
粉丝
1
获赞
0
评论
1
收藏
私信
关注
热门文章
GraphScope、Neo4j与TigerGraph单机环境下性能对比 146
NetworkX与GraphScope的性能对比 88
GraphScope、Gemini与GraphX的性能对比 60
分布式图计算引擎 46
国足历届世界杯对战图关系 45
最新评论
图分析入门
大家一起学编程(python): 感谢博主的分享!
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
最新文章
2021-10-11
图数据库在社交方向上的应用
国足历届世界杯对战图关系
2021年11篇
你的浏览器目前处于缩放状态,页面可能会出现错位现象,建议100%大小显示。
举报
————————————————
版权声明:本文为CSDN博主「6979阿强」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/tanekf6979/article/details/120067176
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)