上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 15 下一页
摘要: Python:用NetworkX生成并绘制(带权)无向图 NetworkX是一个非常强大的网络科学工具,它封装了图的数据结构和许多经典图算法,也内置了许多可视化函数可供调用。首先我们需要对随机图进行生成。最经典的随机图当属我们在上一篇博客《Erdos-Renyi随机图的生成方式及其特性》中讲到的Erdős-Rény随机图了,我们这里选用其中的𝐺(n, p)形式,调用对应的API。 阅读全文
posted @ 2022-05-11 09:36 orion-orion 阅读(2143) 评论(1) 推荐(2) 编辑
摘要: 图数据挖掘:Erdos-Renyi随机图的生成方式及其特性 Erdos-Renyi随机图以两位著名的匈牙利数学家P.Erdős和A. Rényi的名字命名的,是生成随机无向图最简单和常用的方法,包括以下两种紧密相关的变体:G(n,p): 拥有n个节点,且边(u, v)以独立同分布的概率p产生的无向图;G(n, m): 拥有n个节点,且其中m条边按照均匀分布采样生成的无向图。G(n, p)生成时按某个次序考虑所有可能边中的每一条,然后以概率p独立地往图上添加每条边。 阅读全文
posted @ 2022-05-10 19:20 orion-orion 阅读(3397) 评论(3) 推荐(3) 编辑
摘要: SICP: 层次性数据和闭包性质(Python实现) 序对可以为我们提供用于构造复合数据的基本“粘接剂”,鉴于Python中tuple中元素不可变的性质,我们通过list来实现序对,如[1, 2]。Python的PyListObject对象中实际是存放的是PyObject*指针, 所以可以将PyListObject视为vecter 阅读全文
posted @ 2022-05-06 22:09 orion-orion 阅读(502) 评论(0) 推荐(0) 编辑
摘要: Python:实现简单的递归下降Parser 在上一篇博文中,我们介绍了用正则表达式来匹配对应的模式,以实现简单的分词器。然而,正则表达式不是万能的,它本质上是一种有限状态机(finite state machine,FSM), 无法处理含有递归语法的文本,比如算术运算表达式。要解析这类文本,需要另外一种特定的语法规则。我们这里介绍可以表示上下文无关文法(context free grammer)的语法规则巴科斯范式(BNF)和扩展巴科斯范式(EBNF)。实际上,小到一个算术运算表达式,大到几乎所有程序设计语言,都是通过上下文无关文法来定义的。对于简单的算术运算表达式,假定我们已经用分词技术将其转化为输入的tokens流。 阅读全文
posted @ 2022-04-30 17:06 orion-orion 阅读(670) 评论(0) 推荐(0) 编辑
摘要: Python:用re模块实现简易tokenizer 分词(tokenization)任务是Python字符串处理中最为常见任务了。我们这里讲解用正则表达式构建简单的表达式分词器(tokenizer),它能够将表达式字符串从左到右解析为标记(tokens)流。要完成这样的分词操作,我们首先需要定义出所有可能的标记模式(所谓模式(pattern),为用来描述或者匹配/系列匹配某个句法规则的字符串,这里我们用正则表达式来做为模式),注意此处要包括空格whitespace,否则字符串中出现任何模式中没有的字符后,扫描就会停止。因为我们还需要给标记以NAME、EQ等名称,我们采用正则表达式中的命名捕获组来实现。 阅读全文
posted @ 2022-04-29 15:48 orion-orion 阅读(814) 评论(0) 推荐(0) 编辑
摘要: 组合数学:Burnside引理和Polya定理解决染色置换问题 Burnside引理是群论中一个结果,在考虑对称的计数中经常很有用。该结论被冠以多个人的名字。 Polya定理也用来研究不同着色方案的计数问题,它是组合数学中的一个重要的计数公式,是Burnside引理的一般化。Polya计数定理中的群G是作用在n个对象上的置换群。Burnside引理中的群G是对这n个对象染色后的方案集合上的置换群。两个群之间存在一定的联系,群G的元素,相应的在染色方案上也诱导出一个属于G的置换。 阅读全文
posted @ 2022-04-27 10:14 orion-orion 阅读(349) 评论(0) 推荐(0) 编辑
摘要: Linux:文件解压、复制和移动的若干坑 Linux下进行文件的解压、复制、移动应该是最常见的操作了。尤其是我们在项目中使用大量的数据集文件(比如机器学习)时。然而使用这些命令时一不留神就会掉进坑里,这篇文章我们就来细数用Shell进行文件操作的这些坑。压缩传参顺序是压缩后的文件在前,压缩前的文件在后,很容易搞错。使用mv语句时也要格外小心,因为它既有移动到目录的作用,也有重命名的作用。 阅读全文
posted @ 2022-04-20 22:24 orion-orion 阅读(1401) 评论(0) 推荐(1) 编辑
摘要: Python:range、np.arange和np.linspace的区别与联系 range是python内置的一个类,该类型表示一个不可改变(immutable)的数字序列,常常用于在for循环中迭代一组特殊的数;numpy.arange是NumPy包的一个函数,它的功能与Python内置的range类似,但该类与Python内置的range区别有两点:一是支持小数参数,二是返回ndarray类型而非像range那样常常做为(隐式转换为)list类型使用;numpy.linspace也是Numpy内置的一个函数,它和numpy.arange类似,但是它不再是简单的[start, stop)左闭右开,也没有使用步长step,而是使用样本个数num。 阅读全文
posted @ 2022-03-21 22:21 orion-orion 阅读(1264) 评论(0) 推荐(0) 编辑
摘要: Python:用pyinstrument做性能分析 在计算密集型计算或一些Web应用中,我们常常需要对代码做性能分析。在Python中,最原始的方法即是使用time包中的time函数(该函数以秒为计时单位)。但是一旦函数多了起来,这种方式显然过于繁杂。类似C语言中的cProfile,在Python中,也有专门的性能分析工具pyinstrument(该库非内置,需要使用conda/pip安装),我们在复杂的项目中可以使用它来代替简陋的time.time()。 阅读全文
posted @ 2022-03-21 14:50 orion-orion 阅读(1498) 评论(0) 推荐(0) 编辑
摘要: Python:用tqdm模块绘制进度条 在计算密集型迭代计算中,我们常常需要知道当前的迭代轮次,最传统的方法就是打印当前迭代计数器的轮数。那有没有更好的方法呢?我们可以使用tqdm模块(非py内置,需要单独按照)来在控制台绘制进度条,这样更加直观。最简单的一种方法是直接做为迭代器使用,还有一种稍复杂的方法,就是自定义进度条计数器的更新。 阅读全文
posted @ 2022-03-21 11:01 orion-orion 阅读(690) 评论(0) 推荐(0) 编辑
上一页 1 ··· 3 4 5 6 7 8 9 10 11 ··· 15 下一页