奇技淫巧第四期

这一期内容主要是11月份的学习总结

一点点python

1

绘制柱形图的经典语句

fig = plt.figure(figsize=(20, 8))
plt.bar(x=names, height=nums)
for x, y in zip(names, nums):
    plt.text(x, y+0.3, '%.0f'%y, ha='center', va='bottom', fontsize=10.5)
# plt.show()
plt.savefig(os.path.join(path_fig, f'{folder_name}_info.png'))
print(sum(nums))

其中的 for 循环较难,主要是在柱形图上方添加文字。
需要注意的是,plt.show() 和 plt.savefig() 不能同时使用
(题外话,以前经常分不清 fig.show() 和 plt.show() ,后来使用 fig.show() 翻过车才开始用plt.show() ,可能 fig.show() 不太稳定,以后默认使用plt.show() 好了)
2
使用random.shuffle重排数据顺序
https://www.runoob.com/python/func-number-shuffle.html
3
使用torch.where实现矩阵中特定元素的筛查
https://zhuanlan.zhihu.com/p/333864883
4
远程修改代码需要注意正确路径,不然是白改
/home/xxxx/anaconda3/envs/xxxxx/lib/python3.8/site-packages/xxxxxxxxx-0.0.0-py3.8.egg/xxxx/zzzzzzz.py
5
interpreter的设置一定要找到conda环境里的python.exe,即使创建环境时使用的是python3.8
win系统下是envs/env_name/python.exe
linux系统下是envs/env_name/bin/python.exe
只要找对了环境里的python程序,就可以调用该环境里所有的包!
6
使用__all__变量可以限制import *导入变量的范围
https://blog.csdn.net/woai8339/article/details/88623962
7
关于pytest的,很全面
https://www.cnblogs.com/sparkling-ly/p/5650413.html
8
pytest无法识别当前目录中的文件的报错
py.test: error: unrecognized arguments: --cov --cov-report term-missing besel_func_test.py
解决方法:
pip install pytest-cov
https://blog.csdn.net/zzq900503/article/details/84785598
9
pytest触发机制:1. 文件名有_test或者test_,在cmd里输py.test或者pytest可以运行所有文件并生成报告。 2. import pytest 通过pytest.assert调用。3. 如果文件名有_test或者test_, 编辑页面中右键即可出现pytest执行的字样
10
一句话建一个python包!
https://saltyball.top/2021/03/27/%E5%86%99%E4%B8%AApython%E5%8C%85-pyscaffold%E7%9A%84%E4%BD%BF%E7%94%A8/#more
安装pyscaffold
当前目录下,输入putup your_package_name
即可建立一个名为our_package_name!!!!!!
一句话一个包!太方便了!!!伙计们用起来!!!!!!!
11
一个简简单单的python终端退出查了n次了,这次不能再忘了
win平台 ctrl + z 再回车
linux Ctrl + D
https://jingyan.baidu.com/article/90bc8fc8a3fe5bf652640c63.html
12
从开源仓库扒下源码以后,cmd进入setup.py所在界面,使用命令
pip install -e .
安装代码库
是修订模式,conda 环境目录下只有一个egg的link,没有代码备份
所以修改源码的时候,在pull下来的目录里修改就好了
改完用git直接push到远程仓库,无需二次修改
python setup.py develop也行,但是有时候不容易通过pip卸载
不需要改源码的话,可以用
pip install .
或者
python setup.py install也行,但是有时候不容易通过pip卸载
当然,pip也有缺陷,它不能检查安装包的版本兼容性,容易造成冲突,使“老包”不能再使用
13
pytorch训练的时候,如何平衡num_worker和batch_size的问题
简单说,CPU负责准备训练数据,GPU负责计算数据,二者是“生产消费”模型
num_worker决定了CPU调用几个线程准备数据,这个一般不会是计算瓶颈,一般很快
最重要的是batch_size,这个指标决定了GPU的显存占用情况,跟训练时间和精度有直接关系。
batch_size调大了,训练时间会大幅下降,GPU显存可能会顶满,所谓“榨干GPU”,但是这样做可能会带来少量的精度损失。
14
一句话写一个if else语句
注意,不能有冒号
读起来有点绕
奇技淫巧第四期_第1张图片
15
tsv是一种机器学习数据存储格式,全称 tab separated values,制表符分隔值
与其类似的,常见的,另一种格式是 CSV,全称 comma separated values;即“逗号分隔值”,
使用python读取时只需要填写正确的分隔符
如果是CSV的话,可以不用填…因为方法的名字就是read_csv

pd.read_csv("./tmp/chipotle.tsv", encoding="gbk", sep="\t")

链接:
https://blog.csdn.net/IT_SoftEngineer/article/details/107325062
https://blog.csdn.net/colourful_sky/article/details/79519597
16
ase 查看数据库的几条命令:
ase db bulk.db 命令行查看
ase db abc.db -w web查看(页面友好)
ase db bulk.db --insert-into bulk.json 数据库导入json文件
ase gui bulk.db 使用ase自带的gui查看
链接↓
https://databases.fysik.dtu.dk/ase/tutorials/db/db.html
还有 ase.io.read 也可以读取数据库。比如说:a = read(‘abc.db@42’)
17
npz文件的写入和读取
https://blog.csdn.net/weixin_35757704/article/details/118175632
下面链接中提到,可以用data.files的方式查看npz文件里的标签
https://blog.csdn.net/AugustMe/article/details/88095362
下面链接是官方文档:
https://numpy.org/doc/stable/reference/generated/numpy.savez.html
https://numpy.org/doc/stable/reference/generated/numpy.load.html
18
使用ase的atom对象写入数据库,如果没有设置calculator,数据库里就不会出现calculator的关键字,也不会出现force和energy。设置calculator以后还需要atoms.get_forces(),calculator会计算每个原子受力及其能量,并将其置于atoms对象里。
19
conda销毁某个环境的时候使用命令:
conda remove -n envname --all
创建新环境的时候使用命令:
conda create -n envname python=3.8
最后一定要加上python=3.8,其他版本也可以,看需求了。加这一句话的目的是下一步安装包的时候可以直接用命令pip,而且不用再下载python。不加这句话就没有python,里面是空的。加了以后会有一些基本的文件。
20
gpu上跑完的模型放到cpu上跑,fine_tuning,需要在state_dict里面改一下map_location的值
state_dict = torch.load(ckpt_path, map_location=‘cpu’)
https://blog.csdn.net/qq_19592705/article/details/109119149
21
RuntimeError: a leaf Variable that requires grad is being used in an in-place operation.

在报错代码前面加一个缩进 with torch.no_grad():
22
pytorch stack函数
https://zhuanlan.zhihu.com/p/365414757
23
在一张大矩阵里,不同索引对应值的相减,可以用索引序列代替(不用整for循环,大矩阵可以一次性take多个索引)
奇技淫巧第四期_第2张图片
奇技淫巧第四期_第3张图片
24
https://www.cnblogs.com/haifwu/p/12814760.html
使用repeat_interleave对张量进行复制,复制倍数由repeats决定,复制哪个维度由dim决定
25

from torch_sparse import SparseTensor

adj_t = SparseTensor(row=i, col=j, value=value, sparse_sizes=(num_nodes, num_nodes))

稀疏矩阵的 i 行和 j 列对应位置的值是value,这个很容易理解,但是后面sparse_sizes不太好理解
我认为是规定了“如果稀疏矩阵映射到dense矩阵,该矩阵的大小”
该矩阵可以比原稀疏矩阵大,多出来行列置零
26
超详细torch_scatter.scatter()的解释
https://blog.csdn.net/lifeplayer_/article/details/111561685
https://zhuanlan.zhihu.com/p/350953046
https://www.cnblogs.com/dogecheng/p/11938009.html
27
numpy.cross 和 torch.cross 可以用来求叉乘,求法向量
官方文档:
https://pytorch.org/docs/stable/generated/torch.cross.html
https://numpy.org/doc/stable/reference/generated/numpy.cross.html
28
https://pytorch.org/docs/stable/generated/torch.numel.html
torch.numel 输入一个tensor,返回该tensor里面的元素的个数
这个函数只有torch有,numpy没有
同样的 repeat_interleave 也是只有torch有
29
indices, offsets = neighborList.get_neighbors(0)
非周期性体系不能用 ase 的 get_neighbors 得到邻居原子的偏移量
因为非周期性体系没有晶格常数
30
定义函数的时候,有默认值的参数应该在最后面(无默认值的函数)
不然会报错:non-default parameter follows default parameter
在这里插入图片描述

1
科研途中看到贝塞尔函数头皮发麻吗?不用担心,不用着急。
贝塞尔函数说白了就是一个曲线方程,可将其类比为三角函数
第二类贝塞尔函数可以看作第一类的非线性组合
知道这些就够了!!把它当做一个三角函数去理解!
https://zhuanlan.zhihu.com/p/87624884
https://blog.csdn.net/qq_29695701/article/details/109481820
https://docs.scipy.org/doc/scipy/reference/generated/scipy.special.j1.html
2
管道命令 | 是将左侧的输出作为右侧的输入
https://blog.csdn.net/qq_36002022/article/details/84945304
3
简单linux程序实现批量读取SCF能量
https://blog.csdn.net/EngzSinger/article/details/108113713
另外,SCF done的能量后log文件最后的HF=能量可能会不一致
简单说,如果使用的泛函不是后HF方法,二者应该是一致的
如果是后HF方法,SCF之后,会将其作为一个初始值计算电子相关能之类的,加上这个能量,体系会更加精确。这个时候的能量是在log文件末尾。可能是HF=也可能是泛函的名字CCSD=之类的
参考文章:http://sobereva.com/488
4
https://blog.csdn.net/bymaymay/article/details/94593982
./ 表示当前目录
…/ 表示父级目录
…/… 表示祖父目录
https://blog.csdn.net/Young__Fan/article/details/80152501

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