Ebib is a tool inside Emacs for bibliography management, supporting BibTeX and biblatex files. This post is just a brief summary of the online manual.
[Read More]Emacs - Gnus
Gnus is the builtin mail client inside Emacs. As long as Emacs is installed, gnus is available.
[Read More]Linux - Command Line Tools
Targetting for more features and conveniences, some extremely excellent command line tools are listed in this document, which is encouraged to use.
[Read More]Linux - Sed
简介
Sed 是著名的流编辑器,它能够对文本进行逐行处理,通常需要配合正则表达式使用。具体地, Sed 先把当前行的文本导入 模式空间(pattern space) 对其处理,然后输出处理后的文本。
Neural Network
Introducation
- The network is composed of an input layer, an output layer, and optionally a series of hidden layers.
- Input layer does not carry out any operation/function, but the hidden and output layers consist of functional neurons, i.e., have activation functions.
McCulloch and Pitts (M-P) model for neurons
\[\begin{aligned} y = f(\mathbf{W} \mathbf{x} - \theta) \end{aligned}\] where \(f\) is termed activation function.
Python - Pandas
Pandas 支持大部分 numpy 语言风格的数组计算。尽管代码风格相似,但最大的不同在于前者是用来处理表格或不同类型数据的,而后者更适合处理相同类型数据的。
Python - Pytorch
张量
在pytorch中,神经网络的输入、输出、以及网络的参数等都采用了“张量”的数据结构。张量与numpy中的多维数组(numpy.ndarray)非常类似,区别在于张量可以在GPU或其他硬件上运行。
- 成员函数名称末尾加上
_,会采用替换模式,也即该成员函数直接修改张量对象本身。 .item()返回其具体数值,该方法仅适用于大小为1(也即只含有一个元素)的张量。.view()功能为reshape该张量(保持元素个数不变),其参数为新的shape。特别地,值为-1的维度可以通过元素总数不变推导得出。- 定义一个张量时,可以通过参数
device参数指定该张量存储于CPU还是GPU。也可以通过其成员函数.to()来转换。 - 定义一个张量时,参数
requires_grad=True表示需要计算并存储对于该张量的梯度。该张量的函数均带有grad_fn属性。对于其任一函数,当调用其成员函数.backward()时,该函数对于该张量自变量的梯度将会被计算并保存在该张量的.grad属性中。 有时候需要停止跟踪记录某个张量(记为
x)的梯度(比如在更新网络参数的权重系数时),可以采用以下任一方式:- 调用该张量的成员函数
x.requires_grad_(False)。 - 调用该张量的成员函数
x.detach()会产生一个新的张量,其属性requires_grad=False。 - 采用with语句,也即
with torch.no_grad():。
- 调用该张量的成员函数
与 numpy.ndarray 相互转换
- 张量的成员函数
.numpy()返回对应的numpy.ndarray。但是,该方法仅适用于存储在CPU的张量。 - 函数
torch.from_numpy()可以将一个numpy.ndarray转换为张量。
值得注意的是,当一个张量存储在CPU上时,该张量与其对应的 numpy.ndarray 是连接着的,也即对其中一个的修改会导致另一个也会被修改。
Python - Basic
Python解释器
Python程序运行时,需要Python解释器去执行 .py 文件。下面是一些常见的Python解释器。
CPython
当Python安装好之后,CPython解释器就已经安装好了。该解释器是用C语言开发的,所以被称为CPython。在终端执行 python 命令后启动的就是该解释器。
PyPy
PyPy解释器采用JIT技术对Python程序代码进行动态编译,所以PyPy以执行速度见长。
Jython
Jython解释器可以将Python程序代码转换为Java字节码,在Java平台上运行。
IPython
IPython是基于CPython之上的一个交互式(interactive)Python解释器,所以被称为IPython。
- 没有内建到Python自身中的IPython特殊命令称为魔术命令,可以看作是IPython系统内部的命令行程序。魔术命令的前缀符号是百分号
%。使用魔术命令也可以不加百分号,只要没有变量被定义与魔术函数名字相同即可。这种特性称为自动魔术,通过%automagic进行启动禁用。
| 命令 | 描述 |
|---|---|
%quickref | 显示IPython快速参考卡。 |
%magic | 显示所有可用魔术命令的详细文档。 |
%debug | 从最后发生报错的底部进入交互式调试器。 |
%hist | 打印历史命令输入。 |
%pdb | 出现任意报错后自动进入调试器。 |
%paste | 从剪贴板中执行已经预先格式化的Python代码。 |
%cpaste | 打开一个特殊提示符,手动粘贴待执行的Python代码。 |
%reset | 删除交互式命名空间中所有的变量、名称。 |
%page OBJECT | 通过分页器更美观地打印显示一个对象。 |
%run SCRIPT.py | 在IPython中运行一个Python脚本。 |
%prun STATEMENT | 使用 CProfile 执行语句,并报告输出。 |
%time STATEMENT | 报告单个语句的执行时间。 |
%timeit STATEMENT | 多次运行单个语句计算平均执行时间(在估算代码最短执行时间时有用)。 |
%who, %who_ls, %whos | 根据不同的详细程度,展示交互命名空间中定义的变量。 |
%xdel VARIABLE | 在IPython内部删除一个变量,清除相关的引用。 |
- 在IPython会话中,可以使用
%run命令运行任意的Python文件。IPython会在同一个进程内执行指定文件中的代码,确保在执行完成时可以立即得到结果。如果一个Python脚本需要命令行提供参数(通过sys.argv获得),那么则需要在命令行的文件路径后面加上参数进行传递。如果想让运行的脚本使用交互式IPython命名空间中已有的变量,需要使用%run -i替代%run。 %paste会获得剪贴板中的所有文本,并作为代码块在命令行中执行;%cpaste与之类似,只不过它会给出一个特殊的提示符提示粘贴代码。%matplotlib魔术函数可以设置matplotlib与IPython命令行或Jupyter notebook的集成。- 在任意代码运行时按下
Ctrl-C,无论脚本是通过%run或是其他长命令运行的,都将引起KeyboardInterrupt,导致所有的Python程序立即停止运行(某些特殊情况除外)。 - IPython中大多数Python对象会被格式化为更可读、更美观的形式。
- IPython还提供执行任意代码块(通过复制粘贴)和整个Python脚步的功能。
- 在一个变量名的前后使用问号(
?)可以显示一些关于该对象的概要信息。使用双问号(??) 可以显示函数的源代码。?可以像Unix命令行一样搜索IPython命名空间。把一些字符和通配符(*)结合在一起,会显示所有匹配通配符表达式的命令。
需要启动Jupyter时,可以在终端中运行如下命令。
jupyter notebook在很多平台上,Jupyter会自动默认网络浏览器(除非启动Jupyter时使用了 --no-browser 命令)。
Beam Pattern
Beamforming
Around the decades, multi-input multi-output (MIMO), a.k.a. multiantenna transmission, has been the focus of the research relating to wireless communications, and attracted the interests and attentions from both academic circle and industrial area. By deliberately designing the complex-valued coefficients of each antenna elements, the transmitted power or its majority can be limited to a specified direction or area. The operation is termed beamforming, and accordingly the weights of all the antenna elements involved are termed a beamforming vector or a beamformer. In this case, the SINR and the power of the received signal at the receiver can be remarkably enhanced.
C++ - Output Object
In object oriented programming (OOP) based C++ program, we usually need to output the properties and members of one or more objects. In this case, overriding the ostream operator, <<, is a convenient and intuitional method. Here is an example for class CLASS.