奇技淫巧第8期

学无止境。
下面是对去年11月至今年5月的零散知识点总结。
春节期间好好放松了一两个月,来校后又懒散的度过了一两个月,直到论文评审意见下来,才开启冲刺模式狂干了一两个月。总的来说,这半年来摸的时间比较多。好,不废话了,开始。

文章目录

  • python 强化
    • 继承
    • 设计模式
    • args, kwargs
    • 装饰器
    • 异步 I/O
    • viztracer
    • 注释中 noqa 含意
    • dpdispatcher 大坑
    • 获取文件大小
    • 热图
    • matplotlib
      • 控制图例的列数
      • 画出空心圆
    • python 项目管理
      • pip 安装报错
      • pip show
      • pip 项目搭建
      • release please tag版本
      • conda clone
      • pyinstaller
  • C语言
    • 编译过程
    • zlib
    • cygwin
    • gcc flag
      • -O flag
      • -m flag
    • 单引号和双引号
    • vscode
    • cmake
  • Linux
    • 权限
    • 软链接
    • ;&& || 区别
    • linux 命令格式
  • 论文撰写 & Latex
    • 英文论文查重
    • 图片增强 & 灵感来源
    • 模板
    • latex 编译报错
    • latex引用
    • 特殊符号输入
    • vscode 中 latex workshop 很实用的功能
    • 表格和图片的标题居中
    • 乱码包
      • 中文
      • 英文
    • xjtu thesis
    • J/OL
  • 化学
    • rdkit
    • 自旋和未配对电子数
    • 波函数中各个量子数
    • KS方程的误差
    • 阴阳极
    • Dalton
    • gaussian install
  • 快捷键
  • read the docs
    • sphinx
    • myst_parser
    • 文档中图片不居中的问题
  • markdown
    • note 模块
    • 分页
    • 图片居中,调整大小

python 强化

继承

https://zhuanlan.zhihu.com/p/459504171
python 的多类继承
省流版本:

  1. python 中一个类可以同时继承多个父类
  2. 当同一方法同时出现在两个父类中时,调用该方法按照继承时从左向右的顺序遍历。
  3. 当存在多级继承时,遍历顺序为深度优先。
  4. 如果多级继承叠加了共同的根节点,特别复杂时,使用.mro()得出遍历路径

设计模式

https://www.jb51.net/article/217067.htm
python 中实现依赖倒置原则,受益匪浅

https://blog.csdn.net/frank_haha/article/details/127949025?spm=1001.2014.3001.5501
python视角下的6大程序设计原则

5种方法实现设计模式中的单例模式
http://www.coolpython.net/informal_essay/20-09/five-methods-to-achieve-singleton.html
清晰简洁,暂存

args, kwargs

https://zhuanlan.zhihu.com/p/50804195
Python中使用 *args 和 **kwargs 来隐式传递参数
*args 以元组的形式传递参数列表,注意元组中的顺序是固定的
**kwargs 以字典形式传递参数,键对应参数名,键值对应参数值
*args 只能在 **kwargs 前面,按顺序 assign 值,**kwargs 按字典 assign 值

装饰器

https://www.runoob.com/w3cnote/python-func-decorators.html
一篇关于 python 装饰器非常全面的报道

http://c.biancheng.net/view/4561.html
Python 中使用 @property 可以将一个方法变为类的属性(方法返回值即为属性值)
值得注意的是,该属性处于只读模式,无法通过重新赋值修改。(还可以通过修改方法返回值修改,这种情况可以通过改进装饰器至 lazy_property 来实现)
除非加上新的装饰器——setter
此外,该属性的删除可以用 deleter 实现

异步 I/O

python 使用 asyncio 实现 异步 I/O,适合 I/O 密集型任务,链接:https://zhuanlan.zhihu.com/p/59621713

viztracer

使用 viztracer 能够轻松分析 Python 中的函数调用关系,其中 vizviewer 提供了一键式可视化服务,这对高并发任务的分析调试很有帮助,链接:https://www.bilibili.com/video/BV1d34y1C78W?p=1&vd_source=4a5ba2714e3b8655fcf531740196c200

注释中 noqa 含意

https://blog.csdn.net/xiaodongxiexie/article/details/80970336
Python 注释中 noqa 的含义,no quality assurance

dpdispatcher 大坑

对于torque集群
管理节点向其他节点提交任务时需要有一个pbs的命令
#PBS -l nodes=node03:ppn=24
中间的’node03’对应number_node关键词

此外,在local context下,‘remote_profile’: None,不是其他

获取文件大小

https://www.cnblogs.com/hider/p/15261801.html
os.path.getsize() 获取文件大小
os.stat().st_size 也可以

热图

使用pandas+seaborn+matplotlib绘制相关性矩阵热图
https://itslinuxfoss.com/how-to-create-a-correlation-matrix-using-pandas

matplotlib

控制图例的列数

https://stackoverflow.com/questions/73836503/in-matplotlib-legend-how-to-define-number-of-columns-in-horizontal-legend-ncol
随手记:
matplotlib 在绘制图例时使用函数 legend
在 matplotlib 3.6.0 版本以前,可以通过参数 ncols 去控制图例的栏数
在2022年九月份更新的 3.6.0 版本以后,这个参数修改成了 ncol
省流:新版本中ncols参数变成了ncol

画出空心圆

scatter , c=‘none’
https://blog.csdn.net/cfjcyc0301/article/details/109066555

python 项目管理

pip 安装报错

LookupError: setuptools-scm was unable to detect version for H:\fullnet\fullnet-main\fullnet-main.

Make sure you’re either building from a fully intact git repository or PyPI tarballs. Most other sources (such as GitHub’s tarballs, a git checkout without the .git folder) don’t contain the necessary metadata and will not work.

For example, if you’re using pip, instead of https://github.com/user/proj/archive/master.zip use git+https://github.com/user/proj.git#egg=proj

一种可能的报错原因是,本来是一个github项目,没有git clone到本地,而是直接打包到了本地,再直接安装。解决方法是git clone到本地,再用 python setup.py install 安装

pip show

https://blog.csdn.net/sinat_29158315/article/details/81813556
如果你的环境中同一个包安装了多次,而你又不知道正在使用的是哪一个,那么一个很简单的方法是,用 pip show package 即可查看正在使用包的位置

pip 项目搭建

  1. setup.py 和 setup.cfg
    后者是前者的简易形式。主要内容存放在后者,前者只是个壳。
    这两个文件是在
    python setup.py install
    这样的命令下使用的
    不涉及pip
    setup.cfg 的官方教程
    https://setuptools.pypa.io/en/latest/userguide/declarative_config.html

  2. pyproject.toml
    该文件是近几年引入的更完善的包管理机制
    如果你使用pip,例如,你需要向pypi发布包,在github的自动化工作流里,按照pyproject.toml进行项目安装。或者下载完源码后,使用 pip install . 命令安装。
    这两种情况下:
    pyproject.toml override setup.cfg
    https://setuptools.pypa.io/en/latest/userguide/pyproject_config.html
    ===============================================
    事实上,很多人在讨论,两个配置文件,功能一致,能否只保留 pyproject.toml

我认为,为了能同时使用pip和python setup.py命令安装,我们需要整理 setup.cfg 和 pyproject.toml 两个文件。这并不矛盾。每个配置文件都有其适用的场景。

注意:如果你使用了setuptools_scm。默认情况下,pypi 的 source distribution 是项目里的所有文件。为了能在发布时跳过一些文件,我们可以在根目录上添加MANIFEST.in,这会override setuptools_scm
https://packaging.python.org/en/latest/guides/using-manifest-in/

release please tag版本

github release please 修改tag版本

  1. 事先用命令行push上一个版本号
  2. 再从本地push(可以用github desktop)上要修改的东西
    https://www.conventionalcommits.org/en/v1.0.0/#summary
    git commit 要遵循特定的格式,如上

如果不是第一次的话,后续会自动进行版本更新

conda clone

使用 conda 克隆已有的仓库

conda create -n auto10 --clone torch1.10-cu102-py38

删除旧环境

conda remove -n conda-old --all    

pyinstaller

使用 pyinstaller 能够将一个 python 项目打包成一个可执行文件
https://blog.csdn.net/m0_48692571/article/details/107020772

C语言

编译过程

https://zhuanlan.zhihu.com/p/371323950
https://blog.csdn.net/Utotao/article/details/95755916
c语言编译过程及工程下的.c文件.h文件.o文件.so文件.a文件
https://blog.csdn.net/weixin_46919419/article/details/112550651
一个 .c 文件是一个编译单元,编译器每次编译只能处理一个编译单元
最后再把编译好的文件链接起来

zlib

C 程序中使用 zlib 步骤:
下载源文件 https://zlib.net/
解压缩
编译
创建 libz.a 软链接到目标库
目标库编译
命令行执行目标时加上输出 > xxx.gz
输出的是 gzip 格式的压缩文件
使用 gzip 进行解压 gzip -dv xxx.gz

https://www.runoob.com/linux/linux-comm-gzip.html
linux gzip命令教程,对应格式为 .gz

cygwin

https://blog.51cto.com/u_15244533/2845242
使用 cygwin 能够在 win 下创建一个UNIX环境,并编译C文件

gcc flag

-O flag

gcc -O3
gcc 在编译过程中对代码进行优化,使其运行速度更快。
gcc 深不见底,类似的功能还有 -O2(适合生产的), -Os(代码体积更小的) 等等
https://www.linuxtopia.org/online_books/an_introduction_to_gcc/gccintro_49.html#:~:text=It%20is%20the%20default%20optimization,levels%20%2DO2%20and%20%2DO1%20.
https://stackoverflow.com/questions/11546075/is-optimisation-level-o3-dangerous-in-g

https://stackoverflow.com/questions/3399821/gcc-o4-optimization-flag
-O4 optimization 应该是和 -O3 一样的,可以通过
gcc -c -Q -O3 –help=optimizers | grep enabled
查询

-m flag

gcc 使用 -march=native -mtune=native 来针对个人电脑平台对代码进行自动化优化。
“-march=native” 告诉 gcc 本机CPU的型号
“-mtune=native” 告诉 gcc 根据CPU型号进行代码优化
虽然二包含了一,但最好还是二者同时出现,相关讨论可见这篇很详细的博客↓
https://lemire.me/blog/2018/07/25/it-is-more-complicated-than-i-thought-mtune-march-in-gcc/
官方文档↓
https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html#:~:text=Using%20%2Dmarch%3Dnative%20enables%20all,CPU%20with%2064%2Dbit%20extensions.

但是这个 flag 对生产有一定的风险,因为程序性能无法在不同平台上做到统一:
https://stackoverflow.com/questions/52653025/why-is-march-native-used-so-rarely

单引号和双引号

https://blog.csdn.net/u013541620/article/details/43172891
随手记:
C语言的单引号和双引号是不同的
单引号引起是的字符
双引号是字符串

vscode

https://zhuanlan.zhihu.com/p/77074009
https://zhuanlan.zhihu.com/p/85273055?utm_campaign=shareopn&utm_medium=social&utm_oi=64477496082432&utm_psn=1579616044616003585&utm_source=wechat_session
使用 vs code 配置 c/c++ 环境

cmake

https://www.jetbrains.com/help/clion/quick-cmake-tutorial.html#new-project
学习 cmake 的 clion 教程
https://blog.csdn.net/weixin_42660446/article/details/119650036
cmake 没有生成 Makefile。原因是选错了编译器。
https://www.jianshu.com/p/07acea4e86a3
Cmake命令之add_subdirectory介绍
使用 add_subdirectory 可以编译子目录,子目录的 Makefile 和主目录一致。

Linux

权限

https://blog.csdn.net/zhangvalue/article/details/84979635
linux 给文件或文件夹加权限
chmod 777 xxx
开放所有权限
chmod a+x xxx
给所有人可执行权限
https://blog.csdn.net/u012106306/article/details/80436911
可执行文件的颜色是绿色的
https://www.cnblogs.com/tonyauto/p/8085551.html
chmod +x 和 chmod u+x的区别:chmod +x somefile 和 chmod a+x somefile 是一样的
给文件所有者添加可执行权限:chmod u+x 文件名

软链接

https://www.cnblogs.com/sueyyyy/p/10985443.html
linux 创建软链接
ln -s 源文件(或原文件夹文件夹) 目标文件(或目标文件夹)

;&& || 区别

https://www.cnblogs.com/lizhouwei/p/9991635.html
Linux中分号、&&和||的区别
分号,命令之间没有联系,顺序执行
&&,命令1正确执行,命令2才会执行,否则命令2不会执行
||,命令1错误执行,命令2才执行。
此外还有管道命令 |
命令 1 的输出是命令 2 的输入

linux 命令格式

command [option] [arguments]

论文撰写 & Latex

英文论文查重

crosscheck 和 turnitin
(只要是自己写的,没必要查重)

图片增强 & 灵感来源

https://github.com/xinntao/Real-ESRGAN
使用 Real-ESRGAN 可以进行图片增强等

https://blog.csdn.net/frank_haha/article/details/127913618?spm=1001.2014.3001.5502
高质量科研绘图工作流,博客

https://github.com/xinntao/HandyFigure
HandyFigure 提供了众多论文插图的PPT原件,方便个人使用

模板

acs 的 SI 如果使用 acs 的模板(\documentclass[manuscript=article]{achemso}),不会出现目录页
一种解决方案是,从 模板网站 https://www.latextemplates.com/ 里挑选一个
需要注意的是,参考文献需要设成 acs 格式。
\bibliographystyle{achemso}
\bibliography{ref.bib}
但是这样没有参考文献的序号。
解决方案是调整 natbib 包的设置
\usepackage[numbers,super]{natbib}

latex 编译报错

https://blog.csdn.net/qq_38522564/article/details/128630936
编译bibtex时报错“I couldn’t open file name `xxxx.aux’.”
原因是,我们通常需要
pdflatex -> bibtex -> pdflatex2
或者,中文的情况
xelatex -> bibtex -> xelatex
2
这一过程中每编译一次会删掉编译过程中的中间文件,而 .aux 文件就很可能在此时被删掉。
解决方法就是找到设置,搜索aux,进入 Clean: File Types 选项,删掉 .aux 文件即可

latex引用

最好是引用相对路径
https://blog.csdn.net/OOFFrankDura/article/details/91345321

特殊符号输入

大部分是加 \ 形成转义字符
https://blog.csdn.net/m0_37149062/article/details/108240050
latex 特殊符号输入

vscode 中 latex workshop 很实用的功能

在miscellaneous目录下
open citation browser 可以打开文件关联的参考文献文件
reveal output folder 可以打开编译输出文件所在的目录

count words可以查询文件中有效字数 ( 并非实时的,编辑后需要保存才能查 )
注意:
latex workshop中查字数的功能其实也是调用的texcount
texcount详细功能参照:https://www.ctan.org/pkg/texcount

表格和图片的标题居中

latex 中使用 \usepackage[justification=centering]{caption}

乱码包

中文

latex 一个非常有意思的包: zhlipsum
链接:https://ctan.org/pkg/zhlipsum
这个包支持随机生成中文乱码,常用来测试排版效果。
常用使用命令是 \zhlipsum[⟨段落⟩][⟨选项⟩]
选项可以选择乱文的来源,在encoding=utf8 时,默认使用name=simp的乱文。这些乱文是提前准备好的,所以选项这个空可以不用管。
下面就是指定乱文所在的段落。
比如:\zhlipsum[2,5] 指原文(提前设计好的)的第 2 和 5 段
\zhlipsum[1] 指原文第1段

英文

英文 latex 随机文本生成器:blindtext
使用方法:\blindtext 生成一段随机文字,\Blindtext 生成一大段文字(其实就是将\blindtext 文字乘以 5)还支持德文、法文等,详细功能看链接:https://www.ctan.org/pkg/blindtext

xjtu thesis

https://github.com/obster-y/XJTU-thesis
注意,参考文献跟Word差异特别大
需要如下改动:

% gbnamefmt=lowercase 将姓名除首字母外小写
\RequirePackage[hyperref=true,backend=biber,style=gb7714-2015,gbalign=left,gbnamefmt=lowercase,gbpub=false]{biblatex}
\renewcommand{\bibfont}{\zihao{5}}
\setlength{\bibitemindent}{1pt}

\setlength{\bibnamesep}{-0.05pt}
\setlength{\bibinitsep}{-0.05pt} 
\setlength{\biblabelsep}{2pt} %缩序号和条目间的距离
\setlength{\bibparsep}{-3pt} %缩条目间的距离

由于biblatex是嵌入到程序中的,有一些关键词莫名其妙丧失了功能,例如调整条目内行距的 \bibitemsep ,不起作用。
关于biblatex的各种关键词,可以查文档,链接在:
https://ctan.org/pkg/biblatex?lang=en

J/OL

参考文献中 [J/OL] 的含意:
OL 表示电子期刊 (online?)
如果你的 bibtex 中包含了 doi, url 等信息,编译后会在 J 后面加 OJ
https://www.zhihu.com/question/436028611
如果是Word手动敲参考文献,可以留意一下该参考文献是否有具体的页数,如果页数、卷目等信息残缺,可以甩一个doi,加上OL,代表虽然我不知道具体页数,但你可以通过这个链接访问到

化学

rdkit

使用 rdkit.Chem.Draw 可以友好绘制分子二维图像。
批量绘制时通过将核心稳定,可以获得整齐划一的图像。
http://rdkit.org/docs/GettingStartedInPython.html#drawing-molecules

自旋和未配对电子数

https://zhuanlan.zhihu.com/p/550366136
https://zhuanlan.zhihu.com/p/102774303
随手记
自旋多重度,未配对电子数,(总)自旋(磁量子数,电子自旋角动量)之间的关系
(下述暂不考虑带电体系)

  1. 每个 alpha 电子是 正1/2,每个 beta 电子是负1/2
  2. 体系内所有电子中和以后,净自旋就是通常意义上的自旋 S
  3. 一般情况下(不考虑那么细,认为两类轨道是等能的,匹配的),净自旋就是未配对电子个数的二分之一(xtb 的 –uhf 标签)
  4. 自旋多重度(这个概念一般 gaussian 用的多)是 2S+1,不知道为什么是这个公式,但记着就行。(也可以是,未配对电子数加1)
  5. 我们常说的,单线态就是2S=0,没有孤电子的情况;双线态是2S=1,一个孤电子;以此类推,加1即可

波函数中各个量子数

主量子数为电子的层数,表示电子层,电子层符号K、L、M、N、O、P、Q主量子数n是决定电子能量高低的主要因素。角量子数l决定电子空间运动的角动量,以及原子轨道或电子云的形状,在多电子原子中与主量子数n共同决定电子能量高低。磁量子数m是描述原子轨道或电子云在空间的伸展方向。

n, l, m 描述的是电子所处的轨道的特征,更多是相对原子核而言的 。对应波函数的空间部分。

自旋量子数m_s
原子中电子除了以极高速度在核外空间运动之外,也还有自旋运动。电子有两种不同方向的自旋,即顺时针方向和逆时针方向的自旋。通常用向上和向下的箭头来代表,即↑代表正方向自旋电子,↓代表逆方向自旋电子。
(可以类比地球绕太阳转,同时地球也有自转)

m_s 更多是描写电子本身的运动状态。对应波函数的自旋部分。

二者乘一起得到完整的波函数

KS方程的误差

KS方程中引入了单电子近似,即,不考虑电子间任何相互作用。
这种近似使得求解变成了可能。但引入了两种误差:

  1. 两电子交换,根据泡利不相容原理,整个体系的波函数应该加一个负号,是会改变的。但这种单电子近似+以电子密度为变量的波函数考虑不到这一点。我们称这部分误差为交换误差。Ex
  2. 两电子之间的库伦排斥力被完全忽略掉了。真实情况的电子由于相互之间的斥力,可能会保持一定的距离,但在单电子近似下甚至会出现两电子完全重合的情况。由于这种情况下体系能量较高,在平均势场的思想下,引入这部分误差会使得结果相对真实体系偏高。这部分误差被称作关联误差 Ec.

DFT 理论中为了对冲近似带来的误差,引入了交换关联(交换+关联)算符。Exc

值得注意的是,HF方程中也引入了单电子近似。但由于基函数 slater 行列式的交换反对称性,HF的求解中是没有交换误差的。但是HF的平均力场思想导致其完全忽视了关联误差。

DFT以电子密度为主变量的设定导致其难以弥补交换误差,但通过设计合理算符能够很好弥补关联误差。为了综合HF和KS的优点,发展出了杂化泛函,其中最有名的当属B3LYP

近年来发展出的scan泛函通过合理设计交换关联算符,在不涉及HF的情况下也取得了不错的精度,值得注意。
https://zhuanlan.zhihu.com/p/382698569

阴阳极

电池中的阴阳极和电路中的正负极不一样。
电池中的阴阳极这个概念是法拉第提出来的,阳极指获得电子发生还原反应的一极(anode) 阴极指失去电子发生氧化反应的一极(cathode)
阳极获得电子对应电路中的负极,是外电路中电流流入的一极
阴极失去电子对应电路中的正极,是外电路中电流流出的一极

Dalton

The dalton (symbol: Da), also known as an atomic mass unit(non-SI), is a unit of mass that is equal to one twelfth of the mass of a free carbon-12 atom at rest. Its value is approximately equal to 1.660 x 10−27 kg.

gaussian install

集群普通用户安装高斯:

  1. 自己账号下用 cp 命令把文件从根目录转移至自己的目录
  2. 添加环境变量
  3. 登录root账号为文件夹添加权限 sudo chmod -R 750 g16

第三步可以尝试自己加权限(不带sudo)
不行再上root
注意:必须用自己的账号cp,这样文件所有者是个人的

快捷键

微软官方的快捷键大全:
https://support.microsoft.com/zh-cn/microsoft-edge/microsoft-edge-%E4%B8%AD%E7%9A%84%E9%94%AE%E7%9B%98%E5%BF%AB%E6%8D%B7%E6%96%B9%E5%BC%8F-50d3edab-30d9-c7e4-21ce-37fe2713cfad

比如 ctrl+shift+k 是复制当前标签页

read the docs

sphinx

https://sphinx-rtd-trial.readthedocs.io/en/latest/markup/toctree.html
read the docs toc 注意事项:

  1. maxdepth 必须要赋值,如果不赋值的话。当出现两个 toctree 时,会自动将二者合并。
  2. toc 的标题是由索引文件的最大标题决定的

myst_parser

我们可以通过 myst_parser 在 read the docs 的 CI/CD 工作流中自动转化markdown文件
跟模板不同之处是:

  1. 需要修改 requirements.txt
  2. 需要修改 conf.py

markdown 什么都好,在测试过程中发现不能实现 rst 格式中便利的 notes 和 warning
https://sublime-and-sphinx-guide.readthedocs.io/en/latest/notes_warnings.html

对此没有什么好的解决方案,只能将 markdown 转化为 rst ,再进行修改(注意,转化过程中图片的相对路径会变成绝对路径,要进行修改)

如果对这些feature没有强烈的欲望的话,使用本文最后提到的 note 符号也可以

文档中图片不居中的问题

read the docs 网页渲染时,图片不居中的问题
可能的原因:
所使用的rst是pandoc从md格式转过去的,虽然写了一些小脚本,加上了
:align: center 但仍然无法解决图片无法居中的问题

read the docs 用户那么多,应该不会犯这么低级的错误。一定是我的格式有问题。
在 问答https://stackoverflow.com/questions/4963546/how-to-center-align-the-image-with-rerestructuredtext 里,一位答主提到,
… image:: some_pic.png
:alt: some_pic
:align: center
就可以实现居中

在仔细对比后,我发现pandoc在进行图片格式转换时,输出格式为 figure ,不是image。将figure replace成image以后,问题顺利解决。

markdown

note 模块

📝 Note

It works with almost all markdown flavours (the blank line below this line and above the top horizontal line matter).

Note: The note content.

https://stackoverflow.com/questions/25654845/how-can-i-create-a-text-box-for-a-note-in-markdown

分页

https://blog.csdn.net/wyll19980812/article/details/107424344

markdown 使用 <div STYLE=“page-break-after: always;”></div> 进行分页

图片居中,调整大小

注意,这句话前后两行应该空下,不然不能正确显示

<img src=“./fig/customized_figure.png” width=“400px” height=“400px” align=“center” />

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2023年5月23日
下一篇 2023年5月23日

相关推荐