我是一名工程专业的学生,我必须做大量的数值处理,绘图,模拟等工作。我目前使用的工具是Matlab。 我在大学计算机上使用它来完成大部分任务。 但是,我想知道有哪些可用的免费选项。
我已经做过一些研究,许多人说python在各种情况下都可以替代matlab。 我想知道如何用python做所有这些事情。 我使用的是Mac,如何安装不同的python软件包。 那些包是什么? 真的可行吗? 使用此python设置我可以做什么和不能做什么?
如果您正在寻找IDE,则spyder具有与matlab相同的功能:en.wikipedia.org/wiki/Spyder_(软件)
Ive read MATLAB和Python之间最客观的比较之一,其中提到了许多确实有所作为的功能。
在Mac上,最简单的入门方法是(无特定顺序):
有思想的Python发行版,其中包含您可能需要的大多数科学软件包。免费用于学术/非商业用途。
Macports-最新版本,因此sudo port install py26-numpy py26-scipy py26-matplotlib py26-ipython应该会让您入门。
Scipy Superpack-安装所有重要软件包的svn版本的脚本。
大约2年前,我已经做到了这一点(用Python代替了Matlab),并且没有回头。使用Python进行广播,更直观的内存模型和Numpy的其他优点使数值工作变得非常愉快。与f2py和cython一起使用,可以很容易地将内部循环放入另一种语言。这是一个很好的起点-PerformancePython和ParallelProgramming是其他令人振奋的页面。一定要了解Python的"变量是对对象的引用"的语义……在进行了这种调整之后,一切都会顺利进行。击败matlab的最酷的事情之一是我在8个内核上运行了2条线... p = Pool(8); res = p.map(analysis_function,list_of_data)-MATLAB并行工具箱非常昂贵,我还没有看到实际上有它们的大学。
您可能还需要安装开发人员工具。各种模块确实需要gcc编译器并进行安装。
" MATLAB并行工具箱非常昂贵,我什至没有看到一所真正拥有它们的大学。"实际上,"并行计算工具箱"只是一个标准工具箱,Ive使用的所有大学站点许可证都包含该工具箱。如果您谈论的是Distribute Computing Server,那么您绝对正确,因为它很昂贵,但是您不需要它在8个本地内核上运行。
我的立场是正确的-我认为这更昂贵。虽然在英国还没有看到它。为了让您对我的前10名> 25,000名学生大学有一个了解,我们有2个优化工具箱许可证!我们有一个新的计算机套件,用于大约10台计算机的MSc课程-我考虑购买DCS,而总成本是硬件成本的3倍。
哎哟!那很粗糙。 DCS的成本是我为某些小组较大的项目开始学习Python的部分原因。总体而言,很好的答案。 Enthought看起来非常方便(很遗憾,学术人员无法免费使用64位版本)。
EPD的64位版本对学者免费。您只需要给他们您的电子邮件地址即可。
我从事Matlab编程已有15年之久,而使用Python已有10年之久。通常会这样分解:
如果可以满足以下条件:
1.您主要使用矩阵和矩阵运算
2.您有钱购买Matlab许可证
3.您在Mathworks支持的平台上工作
然后,一定要使用Matlab。否则,如果您具有矩阵以外的数据结构,则需要一个开放源代码选项,该选项可让您无需担心许可证即可交付解决方案,并且需要在mathworks不支持的平台上构建;然后,使用Python。
Matlab语言很笨拙,但用户界面很漂亮。 Python语言非常好-具有matlab缺少的迭代器,生成器和函数式编程工具;但是,如果您不喜欢(或不能使用)SAGE,则必须选择一个漂亮的光滑界面。
希望对您有所帮助。
同意一切。如果需要使用非双重稀疏矩阵(matlab不支持),内存映射文件,内存的低级控制(复制事物等)时,将添加Python。我认为Python的漂亮接口现在已经开始出现,科学堆栈开始趋于稳定-例如,请参阅code.google.com/p/spyderlib-我希望它们在未来几年内会迅速改善。
使用numpy时,使用python矩阵同样容易。
用Python替换Matlab时需要考虑三个方面;核心语言功能,IDE和Price。
能力比较
本节概述了每个平台的所有功能。简而言之,Matlab可以做的一切,Python还能做的还很多。但是,诸如线性代数和快速原型制作Matlab之类的东西就更干净了。
Matlab的
Matlab中的所有内容均已捆绑在一起,并且工具箱已无缝集成。它也更加成熟-但不是为通用编程而设计的,这意味着与线性代数无关的任何东西都难以实现。
工具箱:Matlab工具箱非常好,并且python实现常常很难与它们竞争(即使对于诸如优化算法之类的不太专门的东西)。
线性代数:Matlab具有简洁的线性代数功能,易于阅读和解释。
可视化功能:具有非常好的和非常广泛的可视化功能。
Python
Python将需要大量其他模块才能使其成为良好的Matlab替代品。
通用编程:Python是一种合适的编程语言,与Matlab相比,它提供了更多的灵活性。
numpy:提供数组和线性代数例程,但是比Matlab语法更笨拙。我已经爱上了广播功能,但是再也没有repmat垃圾了。
SciPy:统计,优化和其他有用的数学知识。
MatPlotLib:我认为比Matlab提供更高质量的绘图。此外,其设计在语法上与Matlab相似,因此应该易于使用。
SymPy:好的符号编程包。
IDE比较
我认为这是缺少python的地方。我只是发现算法开发(尤其是涉及很多线性代数)在Matlab IDE中不那么痛苦。
Matlab的
这是一些Matlab的关键功能,如果没有工程专业的学生,??这些功能将很难实现。请注意,Python IDE确实也具有其中一些功能,但实现起来却过于草率。
强大的调试功能:可以非限制性地轻松浏览功能。 Python还允许进行调试,但在IDE中通常没有完全实现。
变量资源管理器:MATLAB有一个很好的变量资源管理器,它总是非常适合查看许多受支持的数据类型。一些python IDE努力显示可能令人讨厌的numpy数组。
变量生存期:如果代码在运行时中断,则变量仍然存在,这有助于调试。此外,假设持久变量,连续运行不同的脚本会更容易。在Python中,您将必须手动将变量保存在脚本中,以使变量可用于其他脚本。
事件探查器:非常有助于您了解算法瓶颈所在。
命令行可以在命令行上执行单行指令。 Python在所有好的IDE中也完全支持此功能。
GUI绘图工具:可以从用户界面快速轻松地绘制结果和变量。大多数Python IDE都面向软件开发,因此不支持此功能(尽管sypder通过matplotlib的支持有限)。
文档:所有功能在IDE中都有本机文档。
Python
有一些新的python IDE正在与MATLAB的一些关键优势竞争。我个人喜欢最近以免费社区版本发布的PyCharm。它具有以下功能,并且从UI角度进行了精心设计。
调试
变量浏览器
命令行
文献资料
价格对比
Python是免费的,并且有一个活跃的支持社区。 Matlab也有一个很好的支持社区,但是免费。
Ive在matlab中发现了与您所说的状态完全相反的IDE,也许是因为这是从2013年开始的,但是耶稣,即使是最基本的Python IDE(例如Spyder),即使是Matlabs IDE也绝对是恐怖的。实际上,在matlab IDE中进行编程要比使用带有matlab插件的Visual Studio Code花费更长的时间,因为它的糟糕程度。令人遗憾的是mathworks仍然以与产品一样多的价格销售该产品,但甚至没有为最基本的功能投入自己的IDE。
尝试Sage-它被设计为Matlab,Mathematica等的开源替代品。它是用Python实现的,可以用Python编写脚本,但是它还增加了许多特定于数学的功能。 Mac有一个安装程序,因此您无需下载很多单独的软件包。
还有GNU Octave-Mathematica / Matab的另一个开源替代品,它具有自己的编程语言。但是,我还没有找到有关Mac版本的任何信息(尽管看起来还不是很辛苦)。
也许您喜欢sagemath,它可以将许多现有的开源软件包的功能组合到一个通用的基于Python的界面中。这是一个特色导览。
python(x,y)非常强大,但仅适用于Windows或Linux,因此您必须使用Bootcamp或Linux。 Matplotlib是更轻量的数学软件包,它基本上在Python语言中增加了绘图功能(最好与IPython一起使用)。
如果sourcefourge上的从matlab到python的转换mat2py项目起飞,那就太好了。
重复的。
我的感觉是,对于纯数值/线性代数计算和可视化来说,Matlab是一个更为一致的开发环境。在我看来,Numpy / Scipy / Matplotlib有点偶然。如果您要构建一个完整的程序(以使系统自动化或在网页上显示结果),那么Python的优势就是首先要成为一种真正的编程语言。但是对于交互式数值处理,我认为Matlab仍然可以胜出。 Python中缺少元素明智的中缀运算符是一个小例子(PEP 225)。对于统计计算,数据探索和可视化,很难击败R。
Numpy中数组运算的默认值是按元素排列的...如果您有很多线性代数(对于矩阵类正态*运算符是矩阵乘法),则可以通过使用dot()或矩阵类来轻松克服缺少矩阵乘法的运算符
我同意您可以解决此问题,但是对于一整天都在使用矩阵的人来说,这些解决方法并不像matlab样式语言所提供的那样好。尤其是在动态类型语言中,我不知道对象是数组还是矩阵,因此也不知道*的含义。元素和对象明智的运算符也远不止于矩阵乘法。例如,元素和对象明智的逻辑运算符有不同的用途,而施加列一致性的加法运算符(如Statas mata语言)也很有帮助。