奇技淫巧第五期
这段时间比较忙,今天抽空整理一下12月份的知识点。目录一点点python一点点python
前段时间比较忙,今天抽空整理一下12月份的知识点。
1. 一点点python
python中判断某个文件是否存在
- os.path.exists() 需要注意的是,exists 不会自动弹出,类似 join
- 把 str 转化为 path.Pathlib() 对象,再用该对象的属性 exist() 判断其是否存在
- 个人认为是比较繁琐的,使用try语句,try to open 然后报错了怎么办,不报错怎么办
http://www.spiderpy.cn/blog/detail/28/
集合添加元素
可以使用 add方法 和 update方法
创建集合可以
set()
{1,2}
{[1,2]}
{(1,2)}
等
https://blog.csdn.net/cadi2011/article/details/85097375
https://haicoder.net/python/python-set-add.html
python 写入文件的函数
有write()和writelines()两个
第一个是将字符串写入文件
第二个是将字符串列表写入文件
注意open()函数打开文件时要选择含有写入功能的方式,比如:r+, w, w+, a, a+
既然到这里了,就复习一下各个mode
r 只读,文件不存在就报错
r+ 可读可写,不可新建,写入时是覆盖写,文件不存在就报错
w 只写,不可读,文件不存在就新建,写入时,之前内容清零
w+ 比 w 多了可读
a, a+与w,w+类似,只不过是追加写入
lambda 函数
是python特色函数,指:一条语句即可表示的匿名函数,常用它来代替小的函数
比如 lambda x: str(x) + ‘\n’
等价于
def str_n(x):
return str(x) + ‘\n’
另一方面,由于他是python特色,一些专业的代码库会要求避免使用lambda,因为在移植到其他语言时会造成困难。
__ repr __()方法
https://zhuanlan.zhihu.com/p/53864366
python代码开发和调试中,使用 __ repr__()方法可以输出关于变量,详细的信息
可用于,报错场景中,输出错误变量的详细信息(变量名,type等)
raise KeyError(“Key {} not in AAA {}. Check your code.”.format(pn, AAA_dict.__ repr __()))
.detach().cpu().numpy()的作用
https://zhuanlan.zhihu.com/p/165219346
神经网络输出结果 out 是 带有梯度的 CUDA tensor
.detach() 指去掉梯度
.cpu() 指转为 CPU tensor
.numpy() 指转为numpy array
需要注意的是,如果 x 是一个tensor,比如tensor([1]),str(x)得到的不是"[1]",而是"tensor([1])".
但如果 x 是一个array,str(x) 得到的是"[1]",因此有这方面需求的话,还是要把tensor转化为array
if __name__ == ‘__main__’
第二次学习 if __name__ == ‘__main__’: 语法
__name__属性主要被用来区分 属性所属对象是否是在当前文件初始化的
从而防止测试代码被其他文件导入后执行
https://www.zhihu.com/question/49136398
魔法函数
魔法函数就是在定义类的时候为其增加功能
上述几种函数分别实现了 len() ,迭代,赋值,删除,查询等功能
我认为魔法函数的意义在于,不是普通的方法调用方式。比如说len功能,如果是一个方法,实例化对象为 a,调用方式是a.len(),魔法函数的话,调用方式更加自然,可以是len(a)
https://zhuanlan.zhihu.com/p/356046252
集合、序列相关:__len__函数、__getitem__函数、__setitem__函数、__delitem__函数和__contains__函数
python内置的两种排序函数
https://www.jianshu.com/p/7be04a3f30cd
https://zhuanlan.zhihu.com/p/108050041
python内置两种排序函数,① sort(),仅针对列表排序。② sorted(),对所有可迭代对象均可排序。
理解python中的@classmethod
“直接一点来说,我们知道对于一个普通的类,我们要使用其中的函数的话,需要对类进行实例化,而一个类中,某个函数前面加上了staticmethod或者classmethod的话,那么这个函数就可以不通过实例化直接调用”
https://www.cnblogs.com/baxianhua/p/10845620.html
https://zhuanlan.zhihu.com/p/35643573
字符串反转义
https://www.jb51.net/article/181733.htm
夯实基础
当需要在字符串中输出“”时,在想要输出的位置加上 \ 反斜杠转义字符
判定某个字符串是否是数字
https://blog.csdn.net/m0_37622530/article/details/81289520
https://zhuanlan.zhihu.com/p/81478755
使用 isdecimal, isdigit 和 isnumeric 可以判定某个字符串是否是数字
此外,还可以用集合判断和 eval() 函数作推断
字符串转化为数字
https://blog.csdn.net/weixin_40802676/article/details/105080976
使用 eval 函数执行简单的数学表达式,可以将字符串转化为数字等
有重复值时的Index
https://blog.csdn.net/jsibdhdbjsninsjs/article/details/104135123
python一个数组中有重复值时的Index函数返回值是第一个重复值的index
没有特别快速的,返回重复值index的方法,如果是两个列表之间的对应索引,可以考虑用稀疏矩阵
register_buffer
https://blog.csdn.net/weixin_46197934/article/details/119518497
当我们需要一些参数固定在网络中时,register_buffer是一个不错的选择
https://blog.csdn.net/xinjieyuan/article/details/106951116
pytorch里面register_parameter和parameter效果基本一致,只不过用法有一些差别。
需要注意,不要把register_buffer和register_parameter搞混了
虽然parameter在require grad=flase的时候能达到类似的效果,但是从网络架构的设计角度来看,把不参与更新的变量拿出来单独管理更加有效,可读性更高
super().__ init__()
https://blog.csdn.net/weixin_41194129/article/details/112755438
神经网络常用连接层super().__ init__()方法中,super()可以指名继承哪个方法
https://blog.csdn.net/sinat_39448069/article/details/120902423
神经网络代码中super(Net,self).__ init__()的语法深入分析
该语法运用于多类继承的情况,用于区分继承哪个父类的方法。
(后来好像就写多了,就经常用,明明就一个父类,还要用这种语法。。。)
tips
- 神经网络提交过后,等待训练的过程中对脚本再次修改不会对正在运行的程序造成影响
- ase的write方法可以在filename不存在的情况下,新建文件并写入
- https://blog.csdn.net/qq_43028008/article/details/95243515
在处理可预期的异常时,使用warning有时也是一个不错的选择,因为可以避免中断程序运行,同时予以警告。
警告
- 使用pycharm从远程仓库拉代码,会将本地与之不同的代码置零。所以要做好备份
2. 一点点C++
stringstream 的清空
有两种方法 clear() 以及 str("")
clear()成员函数继承自ios并用于清除流的错误状态,例如,如果文件流的错误状态设置为eofbit(文件结束),则调用clear()将错误状态设置回goodbit(无错误)。
清除内容需要用 str("") 方法
https://blog.csdn.net/chjp2046/article/details/5460462
https://www.codenong.com/20731/
unordered_set
c++ 中 unordered_set 类似 python 里的set
使用hash表存储数据,插入和查询都是O(1),支持的数据类型也有限,不支持vector, 其他的,比如说string是支持的
unordered_map 类似字典
其实c++本来有set,但那个是ordered set,采用平衡检索二叉树:红黑树,也成为RB树(Red-Black Tree),查询是logN
unordered_set 基础
https://blog.csdn.net/qq_39450326/article/details/75949511
https://blog.csdn.net/fanyun_01/article/details/81275676
http://c.biancheng.net/view/7231.html
unordered_map案例
https://blog.csdn.net/yz930618/article/details/88850284
hash vector的解法
https://blog.csdn.net/dreamiond/article/details/88553332
C++ 之 for 新解 auto
顺序遍历数组或列表
https://www.cnblogs.com/jins-note/p/9513129.html
VS 快捷键大全
https://blog.csdn.net/weixin_46196863/article/details/112366069
ostringstream
https://www.cnblogs.com/beeasy/p/6063924.html
https://blog.csdn.net/cckluv/article/details/112758074
ostringstream 是 sstream 里的类,常用于字符串、整型变量等变量类型间的数据转换
优势是不用担心接收变量内存溢出
传入参数和目标对象的类型被自动推导出来,即使使用了不正确的格式化符也没有危险
更加安全
string result=”10000”;
int n=0;
stream<<result;
stream>>n;//n等于10000
c++中的 assert 和 static_assert
c++中的 assert 一般用于 debug 模式,在正式的 release 版本中不会出现 #include <assert.h>
使用assert只能断言,抛出异常位置,无法抛出更详细的异常信息
static_assert 旨在编译过程中发现错误,并会抛出异常,不适合正常的输入数据的检测 #include
使用static_assert可以抛出异常信息,但是那个表达式比较麻烦,规则很多,不容易写对
相比之下,python的assert更加简洁,而且可以输出异常信息,可以作为正常输入数据的检测
assert n > 0, f"Positive number only, please."
静态变量和全局变量解析
https://www.cnblogs.com/USTC-ZCC/p/13924504.html
静态变量和全局变量解析
“全局变量从定义处开始至程序结束起作用,即全局变量存在有效作用域。”
“存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和 static 变量。”
“从分配内存空间看:全局变量,静态局部变量,静态全局变量都在静态存储区分配空间,而局部变量在栈里分配空间。”
“静态全局变量:也具有全局作用域,它与全局变量的区别在于如果程序包含多个文件的话,它作用于定义它的文件里,不能作用到其它文件里,即被static关键字修饰过的变量具有文件作用域。这样即使两个不同的源文件都定义了相同名字的静态全局变量,它们也是不同的变量。”
“
static 全局变量:改变作用范围,不改变存储位置
static 局部变量:改变生命周期,不改变作用范围
”
对 vector 进行 shuffle
使用c++ STL algorithom 对 vector 进行 shuffle
https://www.jianshu.com/p/9613c764447f
c++ 判断某个数据的数据类型
https://zhidao.baidu.com/question/118450796.html
命令行输入的数字,比如 5555 等,这边接收后,如果没有特殊声明,一般会作为字符串处理
gcc 编译 .cpp 文件会报错
在后面加上 -lstdc++ 即可正常编译
不然的话用g++编译
3. latex
- https://blog.csdn.net/zzq060143/article/details/103601113
latex 警告,不能识别字体,解决办法:换成 pdflatex 编译器 - 编译latex的IEEE时警告:
Underfull \hbox (badness 10000) in paragraph
看了一下,这个警告的underfull是说该处排版内容太稀疏了(badness 10000)是TeX衡量排版效果好不好的一个尺度;
如果是Overfull则是说该处内容太多,超出了设定的印刷范围,这多数是由于系统无法找到合适的自动换行点造成的。
https://blog.csdn.net/zhangpeterx/article/details/83239055 - latex 常用宏包 hyperref 用法总结
1 确保宏包声明是最后一个,这样可以避免被overridden(废话)
2 backref 可以在参考文献的位置引入红色方框,可以后向搜索
3 不想要红色方框就什么也不加
4 不想要绿色方框可以用命令 colorlinks
https://blog.csdn.net/qq_34809033/article/details/80733066 书签功能
https://wenku.baidu.com/view/c73c48427cd184254b353572.html
4. 一点点量子化学
tips
- 从文献上下载下来的cif分子晶体文件,直接让 ase 读取,可能会报错
报错原因估计是文件格式太老等,但用vesta可以查看
一个解决的办法是用ms读取晶体文件,并另存为一个新的cif文件
这样过一下(可能)会让文件格式更加规范,ase就可以直接读取了 - gaussian调出元素周期表,*双击*C原子图标
使用ase扩胞有两种方法:
1
from ase.build import molecule
atom_large = make_supercell(atom_r, P=[[2, 0, 0], [0, 2, 0], [0, 0, 2]])
2
atom_large = atom_r * (2, 2, 2)
简单的扩胞用2就好了,复杂的,比如说改变晶胞矢量的方向和大小之类的,用1
但是,需要注意的是,对于一些非周期性的分子晶体,ase扩胞不太准,周期性的没测试过,但是应该问题不大,因为用的比较多,应该不会有问题,而且是pbc,比较有规律。
不管怎么说,如果使用次数不多的话,还是用ms手动扩胞比较保险
5. 杂
-
xshell和xftp提示更新报错解决:
下载一个反汇编的编辑器(sublime text)
打开xshell和xftp里的nslicense.dll文件
搜索7f0c 81f9 8033 e101 0f86 8100
如果搜不到可以缩小查询长度7f0c 81f9 8033 e101
找到后把0f86改成0f83即可
https://blog.csdn.net/binghuazheng/article/details/109040432 -
科研写作三巨头
deepl 翻译
QuillBot AI 改写句子(降重)
Grammarly 语法矫正 -
ctrl + tab 实现浏览器页面切换
-
https://zhuanlan.zhihu.com/p/42281412
浏览器的快捷键
https://blog.csdn.net/Oliver_Hong/article/details/79596990 -
linux 的命令是区分大小写的
其格式如下
command [options] [arguments]
可以理解成 command 是主命令,options 是副命令,arguments 是被执行对象,或者命令执行过程中的参数
其中选项一般有两种:短格式选项(-l)和长格式选项(–all)
对应于arguments,一个是短名称,一个是长名称
短格式选项应用时不能加等号,长格式可加可不加 -
https://zhuanlan.zhihu.com/p/25743443
使用 fire 进行命令行解析,可读性更高 -
HDF5 数据文件简介
https://zhuanlan.zhihu.com/p/104145585
更多推荐
所有评论(0)