打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
python的科学计算和plot功能可能追上或者取代matlab吗
发信人: eol (end of life), 信区: Python 标  题: Re: python的科学计算和plot功能可能追上或者取代matlab吗
发信站: 水木社区 (Fri Jun  5 00:55:47 2009), 转信
  
个人不推荐在windows下使用sage,不是很方便。
  
大部分python数学包在http://www.scipy.org/Topical_Software里都有归类介绍,很全面。
  
以下是我以前使用python做数值计算的一点粗鄙认识(随手写的,肯定漏洞百出,给各位同仁抛砖引玉,吸引更多的人加入python阵营):
  
一、巨无霸,包集合体:
  
1. Enthought Python Distribution (EPD)
http://www.enthought.com/products/epd.php
  
enthought公司出品。in a single package, of a number of different tools for scientific computing. 对学术免费,对商业收钱。交互shell使用IPython  
  
支持主要的操作系统,打包python,windows下安装即用,非常方便。
  
EPD包括了100个库左右,有些功能很强的库都是他们自己做的,比如mayavi2等,对科学计算很方便。
  
对于数值计算,我个人倾向用这个,但比较不好的是对商用收费。但从另一方面说,既然人家收钱,一般软件的可靠性是可以接受的,而且有技术服务支持,文档也不会少给。
  
2. SAGE:  
a comprehensive environment with support for research in algebra, geometry and number theory. 交互shell使用IPython
  
GPL license,比EPD的好不了多少,不要以为开源就一切免费,还是小心使用,不要在商用代码中使用它。
  
支持主要的操作系统,windows下需要先安装虚拟机,在虚拟机上跑695M的sage映像文件,感觉不是很方便,windows下不建议使用。
  
Sage包括进来的包很多,130个包,有些包功能重复,比如atlas, blas已经包括在了scipy中,sqlite在python2.5中已经是标准库等等
  
感觉sage的胃口太大,“Creating a viable free open source alternative to Magma, Maple, Mathematica and Matlab”,这个饼画得太大。而且It combines the power of many existing open-source packages into a common Python-based interface,对于开发专业库似乎没有兴趣,比EPD差远了(mayavi2是EPD开发的,numpy,scipy也是EPD支持和发起的)。
  
  
二、常用的比较基本的子包(对付一般的矩阵、方程、插值、积分、最值、信号处理、绘图等等足以):
  
1. NumPy: http://numpy.scipy.org/
It is a hybrid of both Numeric and Numarray incorporating features of both. If you are new to Numeric computing with Python, you should use NumPy.  
BSD, MIT license兼容,比较宽松。
由enthought公司赞助。
  
2. SciPy: http://www.scipy.org/
SciPy includes modules for linear algebra (including wrappers to BLAS and LAPACK), optimization, integration, special functions, FFTs, signal and image processing, genetic algorithms, ODE solvers, and others.  
BSD, MIT license兼容,比较宽松。
由enthought公司赞助。
  
3. SymPy: http://code.google.com/p/sympy/
SymPy is a Python library for symbolic mathematics.纯python写的。
sympycore: 另一种符号计算系统实现。
BSD license,比较宽松。
  
4. matplotlib: http://matplotlib.sourceforge.net/
a Python 2-D plotting library. BSD licese,比较宽松,放心使用。
开发这个的人与开发numpy,scipy的人有重叠。
BSD license,放心使用
  
5. Mayavi2: http://code.enthought.com/projects/mayavi
3-D数据可视化。EPD集合包里提供的,基于VTK, enthought公司出品。.
  
6. IPython: http://ipython.scipy.org/
an interactive environment with many features geared towards efficient work in typical scientific usage. 这个比python自带的shell好用多了,基本可以算标配,而且提供简单的集群计算功能(参看ipengine, ipcontroller)。
  
三、python的包实在太多,可以根据需要选择,当然也可以安装以上的2个巨无霸中的一个图方便。
  
Enthought Python Distribution (EPD)包括的所有包:
http://www.enthought.com/products/epdlibraries.php
  
Sage包括的所有包:
http://www.sagemath.org/download-packages.html
  
其实一般仅用到里面的一部分包。
  
另外有一些专业库需要单独安装,比如有限元、偏微分方程、动力学等等。
  
总的来说,matlab毕竟是商业软件,涉及的领域广泛,用户群巨大,python是没法比的,但是python的优势是灵活,每个功能都有专门的独立的包,扩展性好,语言规范优雅。建议有精力折腾,需求不是很多的人使用。
  
【 在 rmrf (嗯) 的大作中提到: 】
: 有sage
: http://www.sagemath.org/tour.html
: http://www.sagemath.org
: ...................
  
--
在生命的最后,我终于放下了一切,静静的等待着死亡的来临
  
  
我对sage还比较了解,说说我的观点。 
  
首先, Sage 目前在 Windows 下确实比较麻烦, 但是据我所知, Sage 那堆开发者正在把 Sage 的代码移到 VC 上,
而且目前进展比较顺利。相信年内大家就能用上 VC 版本的 Sage 了。 
  
其次, Sage 使用的很多方面的代码,基本上都是比较成熟的,比如符号运算软件 Maxima,师出名门(MIT受DOE委托开发,然后十年前开源的),在科学运算届是相当有名望的。至于很多人说代码有 bug,我认同,但要注意的是,科学计算软件有 bug 是非常正常的事情,无非是多和少的问题。 Mathematica, Maple 之类的符号软件算错的情况海了去了,为啥大家还用呢?这是因为,软件终究是软件,搞科学计算不使用头脑是不行的,知道算法原理,知道判敛依据,才能用好软件,知道自己算出来的东西是不是靠谱。 
  
第三, Sage 用的库很多并不是 Python 的,而是 C, Fortran 甚至用 Common Lisp 写的。在科学计算届混久得一看就能知道这些库是久经考验的。同样 Python 就解释器而言,在数值方面,我甚至没有听说 bug 一事。如果你说 Python 做数值计算都会出 bug,那这语言就不是好不好地问题,而是不能用的问题。我做数值计算相关的工作也三年了,虽说不长,也写过近万行 C/Python 混合的项目,至少我没发现数值方面的bug。 
  
最后,就是胃口的事情,事实上 Matlab 对于目前 Sage 的功能来说是一个超集。 MatLab 具有很多非数值的功能,比如模拟,这些功能开放源代码的同等实现不多,比较靠谱的也就是 SciLab 之类。所以讲Sage能取代 MabLab 个人认为是不可能的事情。但就普通意义上的数值计算,完全用 Sage 还是可能实现的。要想做专业的东西,这个说法就很吹了。 


严格来说matlab, python都是解释性语言。python先编译成字节码然后在python 
虚拟机上运行;按matlab的help里所说,script是逐行解释执行,function则是 
先编译成虚拟码后再执行,“a script is used in MATLAB, it is loaded into 
memory and evaluated one line at a time. Functions, on the other hand, 
are compiled into pseudo-code and loaded into memory once. ”(matlab 
6.5,可能更高版本会有更进一步的优化),所以写成函数要高效得多,不比 
python慢。 
  
至于说运行效率上,由于matlab解释器对数值计算做了专门优化(商业软件怎么可 
能不对自己的解释器做优化的),应该说有些方面比python更胜一筹,前面好像有 
过具体的讨论,是比较循环优化的,虽然可以用向量化操作取代,但是仍是一个 
比较好的证明。 
  
编译型语言是指像汇编,C/C++,fortran,pascal等语言,由编译器或汇编器把 
源代码翻译成机器可执行的二进制码,再由link把相关模块二进制码组合成目标 
平台可执行的程序或动态库。 
  
解释性语言里可细分。一种是直接逐行解释,比如像bash, cshell等各种shell等。 
一种是先编译成与机器无关的字节码,然后由虚拟机解释执行字节码,这方面的 
鼻祖应该是lisp(用过emacs的都知道elc文件吧),像python,ruby,perl等等都是 
如此。java本质上其实也是采用的这种办法发,不过架不住人家java虚拟机做得 
nb,可以动态的把一些字节码翻译优化成本地机器码后再执行,所以也不能完全 
归到此类中。 
  
对于体系结构上,matlab,python用的办法差不多,都是底层用C/C++,fortran等 
编译型语言实现的库搭建,包装给上层使用,然后再实现更复杂的功能。matlab 
底层库有些是使用的已有的库,有些是他们自己写的经过专门优化的;python则 
是使用已有的开源库。另外方向也不同,matlab都是在自己基础上不断演化发展 
扩充,而python更像一个粘合剂,把各种不同的包port到python里来,不能port 
的就采取子进程调用的形式间接port。 
  
可靠性上不能仅仅用单个的子库或子程序的质量来评判,整合过程中也会引入新 
的问题,而且其中某个子库的不成熟也会导致相关功能的不稳定,这个还是需要 
大量的测试,需要更多具有献身精神的小白鼠。 
  
觉得用python做科学计算跟使用emacs的感觉一样,根据你自己的需求喜好拼装裁 
剪个性化,很灵活,当然也是双刃剑,受折磨的感觉不好受。 
  
当然有些人是没钱、没办法又没胆用盗版才拿起python或其它替代工具的,所以 
matlab反盗版越厉害,python的队伍也会因此而壮大。 



本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
可以替代Matlab的几款开源科学计算软件
R 和 Python (numpy scipy pandas) 用于统计学分析,哪个更好? |
Matlab-Python矩阵计算速度对比
Python包numpy、Matplotlib、SciPy在64位Windows上的安装
Python|Numpy读取本地数据和索引
Python新手绘图绕不开的17个小问题,学完超过70%的人
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服