奇技淫巧第五期

奇技淫巧第五期,第1张

奇技淫巧第五期

前段时间比较忙,今天抽空整理一下12月份的知识点。

目录

1. 一点点python

python中判断某个文件是否存在集合添加元素python 写入文件的函数lambda 函数__ repr __()方法.detach().cpu().numpy()的作用if __name__ == '__main__'魔法函数python内置的两种排序函数理解python中的@classmethod字符串反转义判定某个字符串是否是数字字符串转化为数字有重复值时的Indexregister_buffersuper().__ init__()tips警告 2. 一点点C++

stringstream 的清空unordered_setC++ 之 for 新解 autoVS 快捷键大全ostringstreamc++中的 assert 和 static_assert静态变量和全局变量解析对 vector 进行 shufflec++ 判断某个数据的数据类型gcc 编译 .cpp 文件会报错 3. latex4. 一点点量子化学

tips使用ase扩胞有两种方法: 5. 杂

1. 一点点python python中判断某个文件是否存在
    os.path.exists() 需要注意的是,exists 不会自动d出,类似 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<>n;//n等于10000
c++中的 assert 和 static_assert

c++中的 assert 一般用于 debug 模式,在正式的 release 版本中不会出现 #include
使用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/83239055latex 常用宏包 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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5713861.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存