建议尽量使用numpy中的整个数组或切片操作,避免循环,尤其是多重循环,显著提高科学计算的效率。
这里有几个简单的例子:
假设a是一个长度为n的numpy数组:
1.计算a中元素的和,用()或(a)代替循环求和。
2.判断a中是否有大于1的元素,用(agt1)。any()而不是进行循环判断。
3.取出a中大于1的元素,放入一个新数组中。使用a[agt1]而不是逐个取出元素。
4.把a中的奇数元素去掉,用a[1::2]代替循环。
5.将a中的所有元素加倍,使用a*2,并不在赋值之前,循环遍历每个元素乘以2。
6.......
numpy是python中科学计算最常用、最基础的工具,掌握好它很有必要。以下是python经常用来做科学计算的一些模块和软件包:
python中最常用的数值计算库,numpy:,提供了一个通用而强大的高维数组结构和大量的科学计算函数(相当一部分是跨scipy的),这是python中几乎所有其他科学计算库的基础。
在numpy的基础上,scipy:提供了解决科学计算中各种常见问题的工具,包括数学物理中的各种特殊函数、数值积分、最优化、插值、傅立叶变换、线性代数、信号处理、图像处理、随机数和概率分布、统计学等等。
sympy:python中的符号计算库支持符号计算、高精度计算、模式匹配、绘图、方程求解、微积分、组合数学、离散数学、几何、概率统计、物理等功能,可以在很大程度上替代mathematica和matlab的符号计算功能。
python的交互式开发和计算环境ipython:比python自己的壳。它支持变量的自动完成和缩进,bashshell命令,并且内置了许多有用的函数和函数。ipythonnotebook可以集成代码、图像、注释、公式、图集,已经成为用python进行教学、计算、科研的重要工具。
马特普罗贝乔python是科学计算最常用和最重要的绘图和数据可视化工具包。
h5py:使用python处理hdf5格式的数据。hdf5是一种广泛使用的科学数据存储格式,具有一系列优秀的特性,如支持大量的数据类型,具有灵活、通用、跨平台、可扩展和高效的i/o性能,支持几乎无限的单个文件存储(高达:python常用的数据分析包,适合时间序列和金融数据分析。
emc:用python实现的马尔可夫链蒙特卡罗(mcmc)库。
pymc:是实现贝叶斯统计模型和马尔可夫链蒙特卡罗抽样的另一个工具。
近年来,python在高性能计算领域得到了广泛的应用,使用python进行并行计算也是一个不错的选择,简单易用,在很多情况下可以媲美c、c和fortran的执行性能。python中做并行计算的有很多,比如使用标准库中的[threadingmodule]()进行线程级并行,使用[multiprocessingmodule]()进行进程级并行,使用[concurrent.futuresmodule]()进行异步并行,使用[module]()进行各种的并行,使用[mpi4pypackage]()进行mpi消息并行。如果你能使用c/c、fortran或cython为python编写扩展模块,你也可以使用openmp并行。可以用[pycuda]()来编程gpu。我个人的【简书主题】()和【csdn博客专栏】()有专门介绍python并行计算的,并提供了大量程序实例。有需要或者有兴趣的可以了解一下。
基于python的语音识别接口调用的识别。基于流媒体,结合alsa、portaudio等录音工具,实现实时语音采样和识别。
语音识别结合语音唤醒(如snowboy)和静音检测(如werbrtcvad)可以实现简单但完整的语音交互前端。