炸鸡人博客 基本上无害

Python 系列:命名空间和作用域

定义

命名空间

命名空间(namespace):官方说法是从名称到对象的映射,实际上就是保存变量名与变量值绑定关系的一个空间。赋值语句会将绑定关系写入命名空间,而引用变量时则会根据变量名在命名空间中查询出对应的值。并且大部分的命名空间都是利用 Python 的字典来实现的(例外如类的 __slots__ 属性)。程序中出现在全局的变量构成一个命名空间,Python 内置的函数和异常类也有它们自己的命名空间,每次定义函数或类时也会创建专属于它们的命名空间。命名空间之间相互独立,同名的变量可以存在于不同的命名空间中,例如两个函数内部可以使用同名的局部变量,这有助于我们在不引发冲突的同时合理复用变量名。

作用域

作用域(scope):官方说法是 Python 程序中能直接访问一个命名空间的文本区域。听起来有点抽象,实际上就是指出程序中哪些区域的文本归哪个命名空间管理,例如函数的作用域显然就是函数体(定义函数的所有语句),全局作用域就是从头到尾整个程序。但并不是说出现在一个作用域中的变量就一定属于该作用域(的命名空间):若在该区域内通过赋值语句等操作创建(或修改)了该变量的绑定关系后,那它就属于该作用域;否则它就属于其它作用域,在当前区域引用它需要根据特定的规则向其它作用域进行查询。例如常见的在函数中引用全局变量。本文的一个重点就是要来仔细说说这一规则。

Python 系列:除法运算符

在 Python 3 中关于除法的运算符有三种:

  • /:表示精确的真除法。魔法方法为 __truediv__
  • //:表示地板除。魔法方法为 __floordiv__
  • %:表示求模。魔法方法为 __mod__

Vim 的语法

Vim 是一个拥有魔力的文本编辑器——这并不是比喻,而是说你在 Vim 中真的可以念咒语来操纵文本。看看我们的键盘,在 normal 模式下几乎每个键都有特定的功能,尤其是其中的数字和 26 个字母。如果把每个键都看作 Vim 这门语言中的单词,那么只要依据特定的语法,通过连续击键来遣词造句,就能施展操作文本的魔法。并且 Vim 语言的语法简单到用一句话就能描述:

verb + noun

下面就来简单讲讲魔法的基本法。

vim_keys

Numpy 系列:random 模块的变化

前言

这几天要用 NumPy 生成随机数,所以去查了一下 np.random 模块的官方文档,却惊讶地发现里面介绍的用法跟我的记忆有很大出入:例如以前用 np.random.rand 便能生成 [0, 1) 之间均匀分布的随机数,现在文档里记载的却是面向对象风格的写法(创建随机数生成器再调用方法……)。调查一番后发现原来这一改动发生于 NumPy 1.17 版本(2020 年 1 月),并且网上对此的中文介绍也比较少,所以现撰文简单介绍一下该模块在改动前后的两套用法。

简单的 Vim 配置

最近越发老年痴呆,连自己写的 Vim 配置的作用都忘光了,所以在本文记录并解说一下我常用的配置以便查阅。这里的配置非常简单,仅用以强化基本的使用体验。由于我同时工作在能联网的 PC 和内网的服务器上,所以也会分开介绍如何在这两种环境下安装插件。文中 Vim 版本分别是 8.1(PC)和 7.4(服务器)。

vim

二值图像的连通域标记

简介

连通域标记(connected component labelling)即找出二值图像中互相独立的各个连通域并加以标记,如下图所示(引自 MarcWang 的 Gist

diagram

可以看到图中有三个独立的区域,我们希望找到并用数字标记它们,以便计算各个区域的轮廓、外接形状、质心等参数。连通域标记最基本的两个算法是 Seed-Filling 算法和 Two-Pass 算法,下面便来分别介绍它们,并用 Python 加以实现。

Matplotlib 系列:colorbar 的设置

0. 前言

承接 Matplotlib 系列:colormap 的设置 一文,这次介绍 colorbar。所谓 colorbar 即主图旁一个长条状的小图,能够辅助表示主图中 colormap 的颜色组成和颜色与数值的对应关系。本文将会依次介绍 colorbar 的基本用法、如何设置刻度,以及怎么为组图添加 colorbar。代码基于 Matplotlib 3.3.4。

Matplotlib 系列:colormap 的设置

0. 前言

所谓 colormap(颜色表),就是将一系列颜色按给定的顺序排列在一起。其用处是,我们可以通过某种映射关系,将一系列数值映射到一张 colormap 上去,使不同大小的数值对应不同的颜色。这样一来,在绘制填色图时便能直观地用颜色来反映数值的分布。

在 Matplotlib 中,数值到颜色的映射关系可以用下面这张流程图来表示

flowchart

图中分为前后两部分

  • 首先将数组归一化(normalize)到浮点型的 [0, 1] 范围(或整型的 [0, N - 1] 范围)上去。
  • 再把归一化的数组输入给 colormap,查询每个数值对应的颜色。

第二部分的映射关系是固定不变的,但第一部分的映射关系可以通过归一化相关的类加以改变,进而实现对数色标、对称色标、离散色标等一系列填色效果。

本文将会依次介绍 Colormap 类、Normalize 类,以及实际应用的例子。代码基于 Matplotlib 3.3.4。

用 Hugo 重新搭建博客

本博客之前是用软件 Gridea 制作的,这是个静态博客写作客户端,可以作为 Markdown 编辑器,同时简单设置下就能一键生成静态页面并上传到网上,非常适合我这种电脑小白使用。不过前段时间发现怎么都没法上传本地写好的内容,于是决定重新用现在流行的 Hugo 来搭建博客。本文使用的是 0.84.4 版本的 Hugo 和 2.32.0 版本的 Git。

地球上两点之间的距离(改)

最近又碰到了给出地球上两点的经纬度,然后计算它们之间距离的问题。之前曾经通过查维基写过简单的博文,不过现在实践时发现博文里问题较多,故重撰如下。

地球的形状

为了计算地球上两点之间的距离,首先需要对地球的形状有个概念,以定义距离的几何表示。我们的一般常识是:地球是一个赤道方向略长、两极方向略短的椭球,且表面有着不规则起伏的地形。这种形状肯定无法直接计算,所以希望能简化为一个能用简单数学式子描述的形状。下面是一个简单且夸张的图示

earth_ellipsoid