python信号分析与处理教程
如何用Python科学计算中的矩阵替代循环?
如何用Python科学计算中的矩阵替代循环?
建议尽量使用 numpy 中的数组整体或者切片操作,以避免循环,特别是多重循环,以显著地提高科学计算的效率。
举几个简单的例子如下:
假设 A 是一个长度为 n 的 numpy 数组:
1. 计算 A 中元素的和,使用 () 或者 (A),而不要使用循环求和。
2. 判断 A 中是否有大于 1 的元素,使用 (A gt 1).any(),不要循环进行判断。
3. 将 A 中大于 1 的元素取出放入一个新的数组,使用 A[Agt1],不要循环判断一个一个地取出元素。
4. 取出 A 中指标为奇数的元素,使用 A[1::2],不要使用循环。
5. 将 A 中所有元素增大一倍,使用 A * 2,不要循环遍历每个元素乘 2 再赋值。
6. ......
Python 中做科学计算最常用最基础的工具就是 numpy 了,有必要好好掌握。下面是 Python 做科学计算经常会用到的一些模块和软件包:
numpy: Python 中最常用的数值计算库,提供了一个通用且功能强大的高维数组结构及大量的科学计算函数(其中相当一部分和 scipy 有交叉),是 Python 中几乎所有其他科学计算库的基础。
scipy: 在 numpy 的基础上提供了科学计算中各种常见问题的解决工具,包括数学物理中的各种特殊函数,数值积分,优化,插值,傅立叶变换,线性代数,信号处理,图像处理,随机数和概率分布,统计学等等。
sympy: Python 中的符号计算库,支持符号计算、高精度计算、模式匹配、绘图、解方程、微积分、组合数学、离散数学、几何学、概率与统计、物理学等方面的功能,能在很大程度上代替 Mathematica 和 Matlab 的符号计算功能。
Ipython: 一个 Python 的交互式开发和计算环境,比 Python 自带的 shell 好用且功能强大得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数。 IPython notebook 可以将代码、图像、注释、公式和作图集于一体,已经成为用 Python 做教学、计算、科研的一个重要工具。
matplotlb: Python 做科学计算最常用和最重要的画图和数据可视化工具包。
h5py: 用 Python 操作 HDF5 格式数据的工具。HDF5 是一个应用广泛的科学数据存储格式,拥有一系列的优异特性,如支持非常多的数据类型,灵活,通用,跨平台,可扩展,高效的 I/O 性能,支持几乎无限量(高达 EB)的单文件存储等。
pandas: Python 中常用的数据分析包,适合时间序列及金融数据分析。
emcee: Python 实现的马尔可夫链蒙特卡洛(MCMC)库。
pymc: 另一个实现贝叶斯统计模型和马尔科夫链蒙塔卡洛采样的工具。
近些年 Python 在高性能计算领域的应用也越来越广泛,用 Python 做并行计算也是一个不错的选择,既简单易用,又能在很多时候媲美 C、C 和 Fortran 的执行性能。用 Python 做并行计算的途径有很多,比如说使用标准库中的 [threading 模块]()进行线程级别的并行,[multiprocessing 模块]()进行进程级别的并行,[concurrent.futures 模块]()实现异步并行,使用 [ 模块]()进行多种方式的并行,使用 [mpi4py 包]()进行 MPI 消息传递并行计算,等等。如果可以使用 C/C ,Fortran 或者使用 cython 为 Python 编写扩展模块,还可以使用 OpenMP 并行。对 GPU 编程则可以使用 [pyCUDA]()。我的个人[简书专题]()和 [CSDN 博客专栏]()中有对用 Python 做并行计算的专门介绍并提供了大量的程序实例。有需要或者感兴趣的可以了解下。
C 是跳水,Python是潜水,如何从C 转型Python?
c 是一门比较复杂的高级语言,它需要编译,作为c的超集,它延续了c语言的指针特性,也是不同于其他语言的重要特性,因为他能很好地控制内存,但是也因为这个原因,经常被初学者诟病,对于初学者起码要学习一两年才能够很好地使用指针,不像其他高级语言如java之类的,简单易学;而c 尽管有他的优点,比如运行速度快,这得益于很多操作系统大多是使用c语言编写的,可以直接进行无缝融合,但是正因为如此,它的跨平台也十分困难,因为每个操作系统又有些许不同,所以这也是它难学的原因。而python不同,他是一门解释性语言,不需要编译,不存在跨平台的问题,同时也是非常简单易学的语言,号称一百行的c语言,十行的java,一行的python,所以会c 的,上手python来说,应该很快的!