学无止境。
下面是对去年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 的多类继承
省流版本:
- python 中一个类可以同时继承多个父类
- 当同一方法同时出现在两个父类中时,调用该方法按照继承时从左向右的顺序遍历。
- 当存在多级继承时,遍历顺序为深度优先。
- 如果多级继承叠加了共同的根节点,特别复杂时,使用.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:fullnetfullnet-mainfullnet-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 项目搭建
-
setup.py 和 setup.cfg
后者是前者的简易形式。主要内容存放在后者,前者只是个壳。
这两个文件是在
python setup.py install
这样的命令下使用的
不涉及pip
setup.cfg 的官方教程
https://setuptools.pypa.io/en/latest/userguide/declarative_config.html -
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版本
- 事先用命令行push上一个版本号
- 再从本地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 -> xelatex2
这一过程中每编译一次会删掉编译过程中的中间文件,而 .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
随手记
自旋多重度,未配对电子数,(总)自旋(磁量子数,电子自旋角动量)之间的关系
(下述暂不考虑带电体系)
- 每个 alpha 电子是 正1/2,每个 beta 电子是负1/2
- 体系内所有电子中和以后,净自旋就是通常意义上的自旋 S
- 一般情况下(不考虑那么细,认为两类轨道是等能的,匹配的),净自旋就是未配对电子个数的二分之一(xtb 的 –uhf 标签)
- 自旋多重度(这个概念一般 gaussian 用的多)是 2S+1,不知道为什么是这个公式,但记着就行。(也可以是,未配对电子数加1)
- 我们常说的,单线态就是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方程中引入了单电子近似,即,不考虑电子间任何相互作用。
这种近似使得求解变成了可能。但引入了两种误差:
- 两电子交换,根据泡利不相容原理,整个体系的波函数应该加一个负号,是会改变的。但这种单电子近似+以电子密度为变量的波函数考虑不到这一点。我们称这部分误差为交换误差。Ex
- 两电子之间的库伦排斥力被完全忽略掉了。真实情况的电子由于相互之间的斥力,可能会保持一定的距离,但在单电子近似下甚至会出现两电子完全重合的情况。由于这种情况下体系能量较高,在平均势场的思想下,引入这部分误差会使得结果相对真实体系偏高。这部分误差被称作关联误差 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
集群普通用户安装高斯:
- 在自己账号下用 cp 命令把文件从根目录转移至自己的目录
- 添加环境变量
- 登录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 注意事项:
- maxdepth 必须要赋值,如果不赋值的话。当出现两个 toctree 时,会自动将二者合并。
- toc 的标题是由索引文件的最大标题决定的
myst_parser
我们可以通过 myst_parser 在 read the docs 的 CI/CD 工作流中自动转化markdown文件
跟模板不同之处是:
- 需要修改 requirements.txt
- 需要修改 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 使用
进行分页
图片居中,调整大小
注意,这句话前后两行应该空下,不然不能正确显示
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net