奇技淫巧第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]
奇技淫巧第8期_第1张图片

论文撰写 & 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 使用

进行分页

图片居中,调整大小

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

你可能感兴趣的:(python,开发语言)