热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

在机器学习科学计算领域,有哪些工具能让python和matlab一样好用?

我平时是做图像上的机器学习实验的,识别和检测之类的.从去年入学一直是用的matlab(老板和实验室同学们都用).但是似乎很多人觉得numpy+matplotlib+scipy比matlab更方便,而且我实际实验中也发现matlab的mex接口很难debug,,而且有时候要用到cuda的话也感觉很难调试,经常就把matlab搞crush了需要重启matlab调试,于是是尝试用python.但是我感觉
我平时是做图像上的机器学习实验的,识别和检测之类的.从去年入学一直是用的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,还是其他什么原因?

回复内容:

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大法加持,你就会感受到蜕变了~~
推荐阅读
  • 提升Python编程效率的十点建议
    本文介绍了提升Python编程效率的十点建议,包括不使用分号、选择合适的代码编辑器、遵循Python代码规范等。这些建议可以帮助开发者节省时间,提高编程效率。同时,还提供了相关参考链接供读者深入学习。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • GPT-3发布,动动手指就能自动生成代码的神器来了!
    近日,OpenAI发布了最新的NLP模型GPT-3,该模型在GitHub趋势榜上名列前茅。GPT-3使用的数据集容量达到45TB,参数个数高达1750亿,训练好的模型需要700G的硬盘空间来存储。一位开发者根据GPT-3模型上线了一个名为debuid的网站,用户只需用英语描述需求,前端代码就能自动生成。这个神奇的功能让许多程序员感到惊讶。去年,OpenAI在与世界冠军OG战队的表演赛中展示了他们的强化学习模型,在限定条件下以2:0完胜人类冠军。 ... [详细]
  • PHP输出缓冲控制Output Control系列函数详解【PHP】
    后端开发|php教程PHP,输出缓冲,Output,Control后端开发-php教程概述全景网页源码,vscode如何打开c,ubuntu强制解锁,sts启动tomcat慢,sq ... [详细]
  • Opencv提供了几种分类器,例程里通过字符识别来进行说明的1、支持向量机(SVM):给定训练样本,支持向量机建立一个超平面作为决策平面,使得正例和反例之间的隔离边缘被最大化。函数原型:训练原型cv ... [详细]
  • Python入门后,想要从事自由职业可以做哪方面工作?1.爬虫很多人入门Python的必修课之一就是web开发和爬虫。但是这两项想要赚钱的话 ... [详细]
  • 本人学习笔记,知识点均摘自于网络,用于学习和交流(如未注明出处,请提醒,将及时更正,谢谢)OS:我学习是为了上 ... [详细]
  • plt python 画直线_机器学习干货,一步一步通过Python实现梯度下降的学习
    GradientDescent-梯度下降梯度下降法(英语:Gradientdescent)是一个一阶最优化算法,通常也称为最速下降法。要使用梯度下降法找 ... [详细]
  • 人工智能推理能力与假设检验
    最近Google的Deepmind开始研究如何让AI做数学题。这个问题的提出非常有启发,逻辑推理,发现新知识的能力应该是强人工智能出现自我意识之前最需要发展的能力。深度学习目前可以 ... [详细]
  • 1.《Python程序设计基础与应用》第1章 Python概述
    第1章Python概述1.1Python语言简介(1)Python是一门跨平台、开源、免费的解释型高级动态编程语言。(2࿰ ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 本文讨论了读书的目的以及学习算法的重要性,并介绍了两个算法:除法速算和约瑟夫环的数学算法。同时,通过具体的例子和推理,解释了为什么x=x+k序列中的第一个人的位置为k,以及序列2和序列3的关系。通过学习算法,可以提高思维能力和解决问题的能力。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • VBA操作Excel之设置单元格属性
    VBA操作Excel简介一、VBA读写Excel文件二、VBA设置单元格属性三、VBA弹出输入和输出窗口参考文档一、VBA读写Excel文件VBA简介及打开Excel文件方法见VB ... [详细]
author-avatar
_大盗坂崎由莉nyS
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有