Python Matplotlib 绘图笔记
这里主要关注 Python Matplotlib 绘图的技术性内容,不讨论非技术性内容,例如论文中的绘图要求或偏好。 Matplotlib 介绍matplotlib 是模仿 MATLAB 风格的 Python 2D 绘图库(3D 的功能比较弱,还是基于 2D 引擎勉强实现的),同时提供了两套 api: 一个是面向过程的,主要调用 matplotlib.pyplot 的函数; 一个是面向对象的,主要调用 matplotlib 的两个子类:matplotlib.figure.Figure 和 matplotlib.axes.Axes ,使用它们的方法进行细节操作。 面向过程的 api 适合简易使用的场景,但是不容易弄清原理;为了更复杂的绘图要求,这里主要采用面向对象的 api。(MATLAB 绘图也是一样的问题,而且主要都在使用面向过程的接口) 关于绘图的呈现方式,在 Jupyter 中很可能会自动绘图而不需要 plt.show(),这与魔法指令 %matplotlib inline 有关。 在笔记中,需要使用如下模块: 123import numpy as npimport...
编码学习笔记
编码是最繁琐的问题之一了,尤其对于 C++ 这种 string 还只是char *简易封装的底层语言来说,对于非 ASCII 的字符串的处理需要考虑各个环节的编码,只要错了一项最终就是乱码。对于一些更高级的语言比如 Python3,全部使用 utf8 就少了很多乱七八糟的乱码问题。 为了避免潜在的乱码麻烦,可以采用如下做法: 对于所有文本,默认使用 UTF-8 编码 对于所有源码,只采用英文(ASCII 编码),无论语言/编译器/解释器对编码的支持如何 对于源码中的注释,尽量使用英文(ASCII 编码),即使必须使用中文注释,也应该采用 UTF-8 编码 ASCII 码首先从 ASCII 码开始,在早期的计算机中,使用一个字节(8 比特,实际上是 7 比特)来表示所有英文字母和常见的标点符号,以及回车,制表符等控制字符,如下表。 这里 4 比特用一个十六进制数来表示,实际上没有用完$2^8=256$个,只用了一半 128 个,具体而言就是只用了 7 比特,最高位始终为 0。其中还包括了一些控制字符,比如著名的换行符:CR/LF,制表...
Linux 文件和链接
inode在 Linux 中,文件的元信息被存储在一个 inode 中,inode 中包括除了文件名以外的所有文件信息,可以用stat命令,查看某个文件的 inode 信息,例如 1stat ~/.bashrc 输出形如 12345678 File: ‘.bashrc’ Size: 1494 Blocks: 8 IO Block: 4096 regular fileDevice: fd02h/64770d Inode: 25774323490 Links: 1Access: (0644/-rw-r--r--) Uid: ( 1004/ user) Gid: ( 1004/ user)Access: 2023-11-06 19:28:47.327126137 +0800Modify: 2023-11-06 19:27:47.324249034 +0800Change: 2023-11-06 19:27:47.345249343 +0800 Birth: - 其中: Inode 项是 inode 编号,这是文件的...
Bash 学习笔记
Bash 启动配置bash (Bourne Again SHell) 是默认的 shell,有必要了解一下它不同启动方式下的配置过程。 当执行 bash 命令或者用户登录系统时,会陆续加载各种 bash 配置文件,还会设置或清空一系列变量,有时还会执行一些自定义的命令,这些行为都算是启动 bash 时的过程。在不同的系统中具体的逻辑还是不同的,目前只关注 Ubuntu 和 CentOS。 启动过程有两个维度的分类方式: 交互式和非交互式 交互式的标准情景:输入一个命令,然后输出user@host:path$,等待用户输入; 非交互式的标准情景:bash执行一个脚本,例如bash demo.sh。 登录和非登录:顾名思义,非登录情景可以加上--login或-l选项来伪装为登录情况。 可以通过下面的方法进行判断: 交互式的判断: 交互式环境下的$-变量会含有字母i; 交互式定义了提示符$PS1,但是非交互式会清空这个变量,因此echo $PS1可以区分。 登录和非登录的判断:shopt login_shell,返回on或off。 1echo $PS1;shopt lo...
文本文件的常见问题
关于文件的处理,在实际应用尤其是跨平台时会遇到各种各样的问题,主要包括如下几个问题: 非 ASCII 字符的编码问题:UTF-8?(这个问题太大了,因此放在另一篇专门的笔记中) 换行符的问题:LF or CRLF? 制表符问题:tab or space? 二进制数据的大小端问题 本文将主要对这些问题进行简要整理。 换行符问题不同平台上文本文件的换行符是不一样的,具体来说: Windows:CRLF \r\n Linux:LF \n macOS:早期是 CR \r,现在已经改成 LF \n 现在只有 Windows 的 CRLF 是个异类了。其实严格来说\r的含义是回车,回到行首;\n的含义是换行,换到下一行。 换行符不一致会带来很多问题:例如 Linux 的文本文件在 Windows 上,可能出现无法换行,连续显示一大段的效果;例如 Windows 的文本在 Linux 上可能出现大量的^M,这就是\r并没有被理解为换行符的一部分。原生的一些文本处理程序,可能无法兼容其它系统上的换行符,例如 Windows 自带的记事本只支持 CRLF,bash 脚本只支持 LF。现代的...
Everything 查询语法整理
学习整理一下 everything 的高级用法吧,感觉这对于提高 Windows 上的生产力很有帮助。(不砍柴,光想着磨刀 ing) everything 的基本工作流程: 输入一个指令或多个指令的组合 everything 对输入指令进行解析,获取具体要求(解析规则受到筛选器以及设置中的选项影响) everything 在数据库中进行检索,检索的项可能是:文件或文件夹的直接名称,或含有绝对路径的完整名称,这与具体情况和开启的选项有关。 检索是否与指令的具体要求相符,返回满足要求的所有项(不区分文件/文件夹) 注:Windows 在文件名和文件夹名称当中不能包含如下特殊字符,允许出现空格 1\ / : * ? " < > | 这些特殊字符可能在 everything 中有特殊的语法作用。 1. 搜索选项我们首先关注菜单栏->搜索的部分选项: 解释一下:(如图即是默认的状态) 区分大小写 全字匹配: 不开启全字匹配:我们输入txt可能匹配到a.txt或者txt2.zip,即txt可能不是作为一个完整单词 开启全字匹配:确保txt只会...
Nginx基本使用与建站配置
记录一下 Nginx 的基本使用与建站配置,免得改的时候又忘记了。(这里不涉及 hexo 博客的具体配置细节,有专门的笔记) Nginx 基本使用基本命令常见操作要求在 root 用户下进行: 第一类操作 启动:systemctl nginx start 关闭:systemctl nginx stop 重启:systemctl nginx restart 第二类操作 测试:nginx -t,显示配置文件目录,检查 nginx.conf 是否有语法错误,并进行测试。 重新加载配置:nginx -s reload,reload 命令会重新加载配置文件,此时 nginx 服务不会中断,服务启动,文件即加载成功。 平稳地关闭:nginx -s quit 迅速地关闭:nginx -s stop 配置逻辑简单记录一下 Nginx 的配置逻辑:(root 用户直接 apt-get 安装,而非源码编译)nginx 配置文件全部位于 /etc/nginx/ 目录,其中值得关注的配置包括: nginx.conf 主配置文件 sites-available/ 文件夹 sites-en...
Windows Cpp 编程中的几个问题
几个最常见的坑,专门为了处理 Windows 的几个麻烦问题。 关于 scanf 警告不安全scanf 代表的一类标准库函数被微软的 MSVC 编译器视作不安全的,可能有缓冲区溢出的危险,因此它总是不厌其烦地建议替换为 scanf_s。通常我们不想理会这个建议,可以使用下面的选项 12345678#if defined(_MSC_VER)#pragma warning(disable : 4996)#ifndef _CRT_SECURE_NO_WARNINGS#define _CRT_SECURE_NO_WARNINGS#endif#endif 这里我们进行了冗余的设置,#pragma选项和下面的_CRT_SECURE_NO_WARNINGS宏定义都可以用来关闭这些警告,相当于加了两道保险。 关于 windows.h 的坑一个著名的关于 windows.h 这个重要头文件的坑,它自己定义了 min 和 max 这两个宏!这直接与 std::min 和 std::max 冲突了,例如下面的代码可能会先进行宏展开,从而导致编译报错。 1a = std::max(b,c); 一个做...
Visual Studio 简单使用记录
之前的 C++编程都是在 Linux 或者 VScode+MinGW 进行的,但有时难免需要使用宇宙第一 IDE,简单记录一些 VS 的基本使用吧,尤其了解一下分布在各个菜单栏各个按钮下的常用配置。(直接命令行参数多省事,省得在各种菜单的犄角旮旯里找配置选项) 本文全部在 VS2019 完成,并且不考虑 MSVC 的纯命令行使用。 1. 解决方案与项目项目是 VS 中的基本概念,例如某个库的开发就是一个项目,解决方案是项目的上层概念,一个解决方案可以包含多个项目。简单情况下一个项目会对应一个同名的解决方案。 解决方案在文件系统中直接对应一个xxx.sln解决方案文件,它记录了解决方案层面的配置信息,实质是一个类似 INI 格式的纯文本文件,形如 12345678910Microsoft Visual Studio Solution File, Format Version 12.00# Visual Studio Version 17Project("{GUID}") = "MyProject", "MyPro...
编程语言概述
整理一下对编程语言的整体理解,内容具有主观性,部分内容取自网络资料和GPT,仅作为学习整理,不保证正确性。事实上部分内容在网上的中文资料很混乱,很多都是相互矛盾的。 主流编程语言列举并简要介绍了常用的编程语言,评价具有强烈的主观性,顺序参考TIOBE 排行榜,但是删除了作者从未使用过的部分语言。 主要关注通用编程语言(GPL,general-purpose language),不包括大部分领域特定语言(DSL,domain-specific language),例如在 bash,powershell 中使用的脚本语言,或者 CMake 其实也能算一门语言。当然,这里的数值计算领域的 MATLAB,Mathematica 严格来说也应该被归类为 DSL。 PythonPython 是一种著名的胶水语言,通用型的脚本语言,学习门槛低,代码可读性很高。 Python 的运算效率很低,尤其是原生数组的运算和循环等。通常科学计算为了达到高效率,都会调用 Numpy 等库进行向量化操作,这些库主要基于 C/C++/Fortran。 Python 是机器学习,人工智能时...
