在机器学习科学计算领域,有哪些工具能让python和matlab一样好用?
程序员文章站
2022-05-19 20:49:52
...
我平时是做图像上的机器学习实验的,识别和检测之类的.从去年入学一直是用的matlab(老板和实验室同学们都用).但是似乎很多人觉得numpy+matplotlib+scipy比matlab更方便,而且我实际实验中也发现matlab的mex接口很难debug,,而且有时候要用到cuda的话也感觉很难调试,经常就把matlab搞crush了需要重启matlab调试,于是是尝试用python.
但是我感觉python很难用诶.我的环境是ubuntu14+pycharm
比如:
我经常需要在程序中设置断点去看看在图像中找的点对不对,在matlab中我可以在任意位置设置断点,然后在命令窗口输入命令去检查变量状态,这个功能我觉得非常方便
matlab断点断下来之后还可以在命令行中inshow()去看图像的状态
matlab的工作空间非常的简洁明了,变量的size和value都是一目了然的.
而使用python就让我感觉很不适应,设置断点之后要点debug才能在断点那里停下来(pycharm),而且断点停下之后watch的变量也有好多冗余信息啊,其实我就想看几个坐标几个特征值是不是make sense.
请问我是python的使用方法不对呢还是图像类的本来就适合matlab,还是其他什么原因?
目前来看,最好是将Anaconda与Pycharm结合起来。
Anaconda的优缺点在之前的答案里面说了。
Pycharm相比Spyder的优点是:
1 调试更方便,Spyder在其他文件里面设置断点,竟然无法停下来,必须得在主程序里面设置一个断点,然后“Step into”,如果嵌套比较深的话,这种方法特别麻烦。 Pycharm就没有这个问题。
2 Pycharm的“Reformat code”功能我特别喜欢,可以自动将你的代码排版规范,比如=两边各空一格,函数结尾空两行等等,不止能作用于一个文件,而且能一次性作用于整个项目!
Pycharm的缺点:
1 最新版本虽然支持了ipython,但功能体验比较差,1,反应比较慢 2 tab键经常不能弹出对象的属性与方法。
2 没有workspace。
所以,我的建议是结合使用这两个工具,基本上能达到MATLAB的使用体验。
2016年3月14日的补充
经过一段时间使用,也发现了Anaconda的缺点。特别是spyder。
1 在workspace里,对数据量偏大一点的变量进行查看,容易卡死,而MATLAB不会。
2 再workspace里,浮点数只显示小数点后三位,我经常要手工修改为显示为小数点后6位,不知道怎么修改默认设置。
3 断点调试明显没有MATLAB方便。
4 没有MATLAB那样方便的Profiler,用于发现代码运算瓶颈,而Spyder没有。
还有其他的,就不一一列举了,总之,在IDE上,Spyder相比MATLAB差远了,但我用Python,仍然会用Spyder,因为目前没有更好的替代品。
原答案:
千言万语汇成一句话: 安装Anaconda!
Anaconda非常适合做研究.Pycharm适合做开发,而不是研究.
为什么说Anaconda好呢?
1 自带了很多适合搞科学研究的库,比如numpy, scipy, pandas, matplotlib, sympy, sklearn等.
2 里面的spyder的界面非常像matlab的界面, 还支持单步调试.编辑器像matlab那样,可以创建cell(使用#%%,与matlab类似),方便查看与调试。
3 里面的ipython notebook, 非常适合交互和展示成果. 额.......试试WinPython? 有了它我已经好久没开matlab了 因为专业!像我这种程序员就天生受不了 Matlab 那种奇奇怪怪的语法,但是 Matlab 在它所擅长的领域里做得很好!非常好!!只要你不拿 Matlab 当 Python 用就好。
Python 是通用编程语言,不是 Matlab 那种专业货。既然是通用的,你拿它做科学计算当然没问题,但是你会发现它不是专门为此设计的,如果你不懂(通用)编程,那么你会发现有很多你所不理解的地方。
「在matlab中我可以在任意位置设置断点,然后在命令窗口输入命令去检查变量状态,这个功能我觉得非常方便
「matlab断点断下来之后还可以在命令行中inshow()去看图像的状态」
另请注意,Python 只是一门编程语言。PyCharm 是一个为 Python 开发而设计的 IDE,但不是 Python 天生和唯一的 IDE,更不是为科学计算所专门设计的。(不过有个叫 sagemath 的平台是专为科学计算设计的,其主语言是 Python。)
PyCharm 设置断点之后不能查看图像了吗?我没用过 PyCharm 所以不知道。但是我知道 Python 肯定是可以做到的。我调试过程中就会经常在有疑问的地方停下来,开个 Python 交互式命令行来仔细研究研究。有时我也会使用 pudb 这种专业(复杂)的调试工具。 python debug只用过log & gdb,断点之类从来没用过。 有这感觉就对了,也不枉费matlab卖那么贵! 只说明一点你还不善于使用python,如果能熟练运用就不会有你这种感受了。 知乎编程处女答,零基础裸学matlab半路继续裸学python,过程痛苦,对于为什么难深有体会:
被要求整改了,原来我是从一个没有计算机基础硬进入python的角度来描述学习的痛苦。可能这个角度比较片面,所以我修改了描述方法,以及简述了我自己怎么克服:
1.Matlab支持矩阵运算,惯坏了我们这群0计算机基础的白菜。写个模拟生成个随机数矩阵然后.*./甚至.^,简直爽快。 然后到python里些好处全没了,.*./变成了复杂和更复杂的循环,对于刚转到python上的人,算一个小噩梦
2.用包矩阵化解决掉第一个问题后,碰上第二个。Matlab函数想用就用,继续惯坏我们非计算机出身,要多美好有多美好。然后到了各类面向对象的语言里,先调用,再使用。向numpy这样函数大量重名的大包还不敢调用*,非得一个个调。有时还有分清对象,sub对象,方法。这个问题接触面相对象总是逃不掉的,有VBA基础可能会不那么吃力
3.然后只要一写循环就会碰到的:缩进,缩进,缩进!
Matlab自动缩进外扩分层,继续惯坏非CS简直美好
python我想用游标卡尺!(真不是网上的梗,我自发的想)。我自己通过写短循环多段和灰字注释能克服一部分
4.Matlab函数不懂直接help能告诉你函数的用法。
python里能看源代码,对于非计算机粗生的一开始会有阅读困难。好在各包的web都是良心的。
5.我这个弱逼还没遇到的路上的各种天坑。
我真的不是黑python,毕竟算法相同模拟一跑Matlab就掩面了。同时掩面的还有Matlab里那一横函数窗口,连存都要多存好几个。
以上都是非CS零基础学习多语言时被呵呵的肺腑之言。肯定会遭致程序员们的集体鄙视,所以被要求整改我没啥怨言。只是我有一个小小的奢望,奢望程序员大神们能够体会我们这些半路出家,又要学数学,又要学算法,还要学语言,还要学市场看case的弱逼金数生。我们经常嘲笑自己是WOW里幻想四修的德鲁伊(金融,数学,统计,计算机)四个天赋,奈何天赋不够还没有装备。我们当中甚至有完全不喜欢计算机的学生笔者自己强行看一段又一段的代码。可以指责我们不喜欢就不要学,但是我们金数的学生都深知短板效应的可怕,以及学金融不懂计算机是何其的幼稚。对于我们而言,编程的唯一的目的就是实现,在此奢望一些理解。我们很弱,不怕被喷,喷我们我们也能学到东西。 看完了楼上的答案。
先明确一点,题主做机器学习,所以以下都针对机器学习。
这个问题分两方面。
首先是语法角度。从纯语法上看,python 显然比Matlab 好很多,但对于机器学习,Matlab 已经足够用,能在保证能力强大的基础上足够简单,完全符合科研人员的需求。比如Matlab 里的类和对象是一团翔,但没关系,因为科研人员用不到。一般搞科研,只需要写个prototype ,能跑通就行,这时候Matlab “对面向对象的支持很差”反而成了一个优点,因为只需要面向过程即可,而面向过程的思路是非常自然而直观的。
当然,mex 不好写,GPU编程不方便,这确实是Matlab 的硬伤。另外Matlab 的运行效率比低,内存管理非常差,这也是一大缺点。
但题主的问题显然不是语言层次的问题。看描述,题主感觉python 不方便。从语言角度,numpy+matplotlib+scipy 是足够强大的,能满足科研人员的一切需求,而且作为脚本语言,python写起来也比java c++简单很多。那问题肯定出在工具上。
Matlab 的IDE 非常适合做科学计算,但PyCharm 只是个通用IDE,风格针对普通编程,并未对科学计算有特殊优化,非计算机出身可能用起来稍有不便。
所以我建议题主试试其他IDE。上面有人推荐Spyder,这个和Matlab 非常像,基本可以无缝接入。另外ipython notebook 也是神器,能写程序能作笔记能分发展示,非常好用。
不过我现在一般都用VS 的python 插件PTVS(Python Tools for Visual Studio),有强大的VS 作支持,代码补全啊、自动跳转啊、调试啊等等都极其方便,推荐给题主和大家。 如果matlab还没python好用,怎么对得起那几万块钱。 除开矩阵运算,python的表达能力比matlab高不知道多少。。(最近接一个matlab项目被这奇葩语法搞得痛不欲生的吐槽)
调试方面的话,不管pycharm还是anaconda我都只习惯看log。。断点什么的,不好用呢。。
传说python程序员的两次飞跃发生在学会decorator和unit test后,再有万能的import大法加持,你就会感受到蜕变了~~
但是我感觉python很难用诶.我的环境是ubuntu14+pycharm
比如:
我经常需要在程序中设置断点去看看在图像中找的点对不对,在matlab中我可以在任意位置设置断点,然后在命令窗口输入命令去检查变量状态,这个功能我觉得非常方便
matlab断点断下来之后还可以在命令行中inshow()去看图像的状态
matlab的工作空间非常的简洁明了,变量的size和value都是一目了然的.
而使用python就让我感觉很不适应,设置断点之后要点debug才能在断点那里停下来(pycharm),而且断点停下之后watch的变量也有好多冗余信息啊,其实我就想看几个坐标几个特征值是不是make sense.
请问我是python的使用方法不对呢还是图像类的本来就适合matlab,还是其他什么原因?
回复内容:
2016年4月7日更新目前来看,最好是将Anaconda与Pycharm结合起来。
Anaconda的优缺点在之前的答案里面说了。
Pycharm相比Spyder的优点是:
1 调试更方便,Spyder在其他文件里面设置断点,竟然无法停下来,必须得在主程序里面设置一个断点,然后“Step into”,如果嵌套比较深的话,这种方法特别麻烦。 Pycharm就没有这个问题。
2 Pycharm的“Reformat code”功能我特别喜欢,可以自动将你的代码排版规范,比如=两边各空一格,函数结尾空两行等等,不止能作用于一个文件,而且能一次性作用于整个项目!
Pycharm的缺点:
1 最新版本虽然支持了ipython,但功能体验比较差,1,反应比较慢 2 tab键经常不能弹出对象的属性与方法。
2 没有workspace。
所以,我的建议是结合使用这两个工具,基本上能达到MATLAB的使用体验。
2016年3月14日的补充
经过一段时间使用,也发现了Anaconda的缺点。特别是spyder。
1 在workspace里,对数据量偏大一点的变量进行查看,容易卡死,而MATLAB不会。
2 再workspace里,浮点数只显示小数点后三位,我经常要手工修改为显示为小数点后6位,不知道怎么修改默认设置。
3 断点调试明显没有MATLAB方便。
4 没有MATLAB那样方便的Profiler,用于发现代码运算瓶颈,而Spyder没有。
还有其他的,就不一一列举了,总之,在IDE上,Spyder相比MATLAB差远了,但我用Python,仍然会用Spyder,因为目前没有更好的替代品。
原答案:
千言万语汇成一句话: 安装Anaconda!
Anaconda非常适合做研究.Pycharm适合做开发,而不是研究.
为什么说Anaconda好呢?
1 自带了很多适合搞科学研究的库,比如numpy, scipy, pandas, matplotlib, sympy, sklearn等.
2 里面的spyder的界面非常像matlab的界面, 还支持单步调试.编辑器像matlab那样,可以创建cell(使用#%%,与matlab类似),方便查看与调试。
3 里面的ipython notebook, 非常适合交互和展示成果. 额.......试试WinPython? 有了它我已经好久没开matlab了 因为专业!像我这种程序员就天生受不了 Matlab 那种奇奇怪怪的语法,但是 Matlab 在它所擅长的领域里做得很好!非常好!!只要你不拿 Matlab 当 Python 用就好。
Python 是通用编程语言,不是 Matlab 那种专业货。既然是通用的,你拿它做科学计算当然没问题,但是你会发现它不是专门为此设计的,如果你不懂(通用)编程,那么你会发现有很多你所不理解的地方。
「在matlab中我可以在任意位置设置断点,然后在命令窗口输入命令去检查变量状态,这个功能我觉得非常方便
「matlab断点断下来之后还可以在命令行中inshow()去看图像的状态」
另请注意,Python 只是一门编程语言。PyCharm 是一个为 Python 开发而设计的 IDE,但不是 Python 天生和唯一的 IDE,更不是为科学计算所专门设计的。(不过有个叫 sagemath 的平台是专为科学计算设计的,其主语言是 Python。)
PyCharm 设置断点之后不能查看图像了吗?我没用过 PyCharm 所以不知道。但是我知道 Python 肯定是可以做到的。我调试过程中就会经常在有疑问的地方停下来,开个 Python 交互式命令行来仔细研究研究。有时我也会使用 pudb 这种专业(复杂)的调试工具。 python debug只用过log & gdb,断点之类从来没用过。 有这感觉就对了,也不枉费matlab卖那么贵! 只说明一点你还不善于使用python,如果能熟练运用就不会有你这种感受了。 知乎编程处女答,零基础裸学matlab半路继续裸学python,过程痛苦,对于为什么难深有体会:
被要求整改了,原来我是从一个没有计算机基础硬进入python的角度来描述学习的痛苦。可能这个角度比较片面,所以我修改了描述方法,以及简述了我自己怎么克服:
1.Matlab支持矩阵运算,惯坏了我们这群0计算机基础的白菜。写个模拟生成个随机数矩阵然后.*./甚至.^,简直爽快。 然后到python里些好处全没了,.*./变成了复杂和更复杂的循环,对于刚转到python上的人,算一个小噩梦
2.用包矩阵化解决掉第一个问题后,碰上第二个。Matlab函数想用就用,继续惯坏我们非计算机出身,要多美好有多美好。然后到了各类面向对象的语言里,先调用,再使用。向numpy这样函数大量重名的大包还不敢调用*,非得一个个调。有时还有分清对象,sub对象,方法。这个问题接触面相对象总是逃不掉的,有VBA基础可能会不那么吃力
3.然后只要一写循环就会碰到的:缩进,缩进,缩进!
Matlab自动缩进外扩分层,继续惯坏非CS简直美好
python我想用游标卡尺!(真不是网上的梗,我自发的想)。我自己通过写短循环多段和灰字注释能克服一部分
4.Matlab函数不懂直接help能告诉你函数的用法。
python里能看源代码,对于非计算机粗生的一开始会有阅读困难。好在各包的web都是良心的。
5.我这个弱逼还没遇到的路上的各种天坑。
我真的不是黑python,毕竟算法相同模拟一跑Matlab就掩面了。同时掩面的还有Matlab里那一横函数窗口,连存都要多存好几个。
以上都是非CS零基础学习多语言时被呵呵的肺腑之言。肯定会遭致程序员们的集体鄙视,所以被要求整改我没啥怨言。只是我有一个小小的奢望,奢望程序员大神们能够体会我们这些半路出家,又要学数学,又要学算法,还要学语言,还要学市场看case的弱逼金数生。我们经常嘲笑自己是WOW里幻想四修的德鲁伊(金融,数学,统计,计算机)四个天赋,奈何天赋不够还没有装备。我们当中甚至有完全不喜欢计算机的学生笔者自己强行看一段又一段的代码。可以指责我们不喜欢就不要学,但是我们金数的学生都深知短板效应的可怕,以及学金融不懂计算机是何其的幼稚。对于我们而言,编程的唯一的目的就是实现,在此奢望一些理解。我们很弱,不怕被喷,喷我们我们也能学到东西。 看完了楼上的答案。
先明确一点,题主做机器学习,所以以下都针对机器学习。
这个问题分两方面。
首先是语法角度。从纯语法上看,python 显然比Matlab 好很多,但对于机器学习,Matlab 已经足够用,能在保证能力强大的基础上足够简单,完全符合科研人员的需求。比如Matlab 里的类和对象是一团翔,但没关系,因为科研人员用不到。一般搞科研,只需要写个prototype ,能跑通就行,这时候Matlab “对面向对象的支持很差”反而成了一个优点,因为只需要面向过程即可,而面向过程的思路是非常自然而直观的。
当然,mex 不好写,GPU编程不方便,这确实是Matlab 的硬伤。另外Matlab 的运行效率比低,内存管理非常差,这也是一大缺点。
但题主的问题显然不是语言层次的问题。看描述,题主感觉python 不方便。从语言角度,numpy+matplotlib+scipy 是足够强大的,能满足科研人员的一切需求,而且作为脚本语言,python写起来也比java c++简单很多。那问题肯定出在工具上。
Matlab 的IDE 非常适合做科学计算,但PyCharm 只是个通用IDE,风格针对普通编程,并未对科学计算有特殊优化,非计算机出身可能用起来稍有不便。
所以我建议题主试试其他IDE。上面有人推荐Spyder,这个和Matlab 非常像,基本可以无缝接入。另外ipython notebook 也是神器,能写程序能作笔记能分发展示,非常好用。
不过我现在一般都用VS 的python 插件PTVS(Python Tools for Visual Studio),有强大的VS 作支持,代码补全啊、自动跳转啊、调试啊等等都极其方便,推荐给题主和大家。 如果matlab还没python好用,怎么对得起那几万块钱。 除开矩阵运算,python的表达能力比matlab高不知道多少。。(最近接一个matlab项目被这奇葩语法搞得痛不欲生的吐槽)
调试方面的话,不管pycharm还是anaconda我都只习惯看log。。断点什么的,不好用呢。。
传说python程序员的两次飞跃发生在学会decorator和unit test后,再有万能的import大法加持,你就会感受到蜕变了~~