计算化学公社

标题: 小白想学习Pythpon 请问有什么好的资料/资源/途径/平台推荐? [打印本页]

作者
Author:
风飞    时间: 2021-1-27 15:42
标题: 小白想学习Pythpon 请问有什么好的资料/资源/途径/平台推荐?
各位老师,
  小白想学习Python,请问有什么好的资料/资源/途径/平台推荐?

作者
Author:
snljty    时间: 2021-1-29 11:44
本帖最后由 snljty 于 2022-9-11 11:36 编辑

--*--链接已更新--*--

O'Reilly系列的那几本书。就是一个动物放封面的那一套。有名的几本都有中译本。
入门是这个
《Python学习手册》
python做科学计算等的话一定要简单了解numpy和matplotlib等。
这本
《利用Python进行数据分析》

上面这两本强烈推荐看一看的。经常是慢的话一天,快的话上午看个入门,下午就可以开始写自己的代码的那种。Python上手极快!
然后说点无关的。
对Python机器学习感兴趣的,推荐这两本。
《Python机器学习基础教程》
《机器学习实战:基于Scikit-Learn和TensorFlow》
做GUI界面的话,简单的用Tkinter即可。上网搜一些有一些很不错的入门教程。复杂的通常是Qt和wxWidget的Python实现,分别叫PyQt和wxPython。这方面的资料感兴趣的话也可以看看。
关于并行和更一般的异构计算计算,首先先要了解协程、多线程(最常见的Python实现CPython目前由于GIL的存在,其本身(不包括C拓展等)还做不到实际意义上的多线程,也就无法使用多线程来利用多核CPU)、多进程等模型,以及GPU计算原理。这方面的书感兴趣的话也可以看一下。我记不清书名了,有时间发一下。虽然Python本身计算效率不高,但是用Python来理解这些模型还是很方便的,可以从技术实现细节上解放出来。
如果无聊时候想学学网络爬虫,可以看看
《Python网络爬虫权威指南》
以上都是O'Reilly的一个系列的。
当然,细节问题上,google往往是你最好的朋友。诸如怎么用Python调用C/C++/Fortran写的库,这些如果你做长期开发,一定要掌握的。
网上都在推荐某L老师教程。我个人不是太推荐初学者看那个。一个是他介绍的很多内容和科学计算方面关系不大,更像网页工程师学的...另一个有时候跳步有点大。
再提一下Python环境的问题。如果不想太折腾,一开始就可以用Miniconda(如果硬盘空间够,直接上Anaconda)。IDE的话简单任务用IDLE,甚至IPython,Jupyter Notebook都可以。复杂任务还是用IDE会比较好。推荐两个IDE:PyCharm和Spyder。各有长处。

上面提到的书我分享到下面的链接了。绝大部分中英文版的都有。
链接:https://pan.baidu.com/s/11WGQpRjZs6DbyxHxIp8ehQ
提取码:BDSB


作者
Author:
0x7F    时间: 2021-2-1 15:07
snljty 发表于 2021-1-29 11:44
O'Reilly系列的那几本书。就是一个动物放封面的那一套。有名的几本都有中译本。
入门是这个
《Python学习 ...

链接被和谐了...
作者
Author:
snljty    时间: 2021-2-1 17:21
0x7F 发表于 2021-2-1 15:07
链接被和谐了...

感谢提醒,我先分享一部分吧,剩下的有时间再筛到底哪个踩到百毒的G点了
作者
Author:
Photon    时间: 2022-8-31 20:57
您好,能再发一下吗,又看不到了。。
作者
Author:
tjuptz    时间: 2022-9-10 21:39
snljty 发表于 2021-1-29 11:44
O'Reilly系列的那几本书。就是一个动物放封面的那一套。有名的几本都有中译本。
入门是这个
《Python学习 ...

请问python 脚本的并行化具体能推荐学习资料吗?最近想学习把脚本并行从而处理md轨迹时更快,希望找点学习资料,万分感谢
作者
Author:
snljty    时间: 2022-9-11 11:32
tjuptz 发表于 2022-9-10 21:39
请问python 脚本的并行化具体能推荐学习资料吗?最近想学习把脚本并行从而处理md轨迹时更快,希望找点学 ...

Python最常见的实现(CPython)由于众所周知的原因(GIL,全局解释器锁)而导致目前版本不支持实质上的多核多线程模型,除非内嵌C/Fortran等,否则多核并行只能考虑多进程方法。这方面的教材还是有一些的,如果对多进程模型比较熟悉,随便找一本都可以。不过我建议先思考几个问题:
1. 慢是慢在哪里?如果是读轨迹慢,可能主要瓶颈在硬盘IO。这个基本无解,除非换(最好NVMe)固态硬盘。或者如果是跨节点IO,可能瓶颈在网络。另外就是算法上有没有能优化的地方?比如计算RMSD,直接算的算法是O(N^2)的,大体系根本算不动。但是算法上推导,用速度自相关函数基于快速傅里叶变换算法可以把复杂度降到O(NlogN),这对大体系可能是上百倍的速度优化,远高于并行带来的速度提升。一般来说,并行来提升速度未必是要最优先考虑的。
2. 是否很好利用了NumPy等数据结构模型底层的C/Fortran实现的优势?还是在用list这样python本身的东西?
作者
Author:
卡开发发    时间: 2022-9-11 13:51
tjuptz 发表于 2022-9-10 21:39
请问python 脚本的并行化具体能推荐学习资料吗?最近想学习把脚本并行从而处理md轨迹时更快,希望找点学 ...

多线程的方法除了上面通过C或Fortran嵌入之外,其实在楼上提到的尽可能使用NumPy数组代替List基础之上,如果计算瓶颈部分只是涉及到NumPy数组或是简单的For循环,你可以使用Numba等JIT方案。要用njit模式要声明变量的类型,用之前看清楚NumPy当中到底有多少函数能够被Numba所支持就可以了,NumPy的FFT并不能被Numba支持(我印象本身也不支持OMP),不过如果规模不是那么大的问题涉及到嵌套FFT的部分其实开object模式就可以了。
作者
Author:
tjuptz    时间: 2022-9-11 17:27
snljty 发表于 2022-9-11 11:32
Python最常见的实现(CPython)由于众所周知的原因(GIL,全局解释器锁)而导致目前版本不支持实质上的多核 ...

谢谢大佬的指教,我的脚本只是用了嵌套for循环从parmed读入的轨迹中的atom list来进行原子对之间的简单坐标运算,判断是否满足设定条件。看来问题可能不在于并行,而在于数据结构或者使用的库。
作者
Author:
tjuptz    时间: 2022-9-11 17:31
卡开发发 发表于 2022-9-11 13:51
多线程的方法除了上面通过C或Fortran嵌入之外,其实在楼上提到的尽可能使用NumPy数组代替List基础之上, ...

确实只是简单的嵌套for循环,我再看看parmed的atom list 对象底层是否是numpy实现的,思考下能否用切片功能代替for循环




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3