목차
回复内容:
백엔드 개발 파이썬 튜토리얼 在机器学习科学计算领域,有哪些工具能让python和matlab一样好用?

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

Jun 06, 2016 pm 04:22 PM
debug matlab matplotlib pycharm 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大法加持,你就会感受到蜕变了~~
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

C 언어 합계의 기능은 무엇입니까? C 언어 합계의 기능은 무엇입니까? Apr 03, 2025 pm 02:21 PM

C 언어에는 내장 합계 기능이 없으므로 직접 작성해야합니다. 합계는 배열 및 축적 요소를 가로 질러 달성 할 수 있습니다. 루프 버전 : 루프 및 배열 길이를 사용하여 계산됩니다. 포인터 버전 : 포인터를 사용하여 배열 요소를 가리키며 효율적인 합계는 자체 증가 포인터를 통해 달성됩니다. 동적으로 배열 버전을 할당 : 배열을 동적으로 할당하고 메모리를 직접 관리하여 메모리 누출을 방지하기 위해 할당 된 메모리가 해제되도록합니다.

누가 더 많은 파이썬이나 자바 스크립트를 지불합니까? 누가 더 많은 파이썬이나 자바 스크립트를 지불합니까? Apr 04, 2025 am 12:09 AM

기술 및 산업 요구에 따라 Python 및 JavaScript 개발자에 대한 절대 급여는 없습니다. 1. 파이썬은 데이터 과학 및 기계 학습에서 더 많은 비용을 지불 할 수 있습니다. 2. JavaScript는 프론트 엔드 및 풀 스택 개발에 큰 수요가 있으며 급여도 상당합니다. 3. 영향 요인에는 경험, 지리적 위치, 회사 규모 및 특정 기술이 포함됩니다.

별개의 구별이 관련되어 있습니까? 별개의 구별이 관련되어 있습니까? Apr 03, 2025 pm 10:30 PM

구별되고 구별되는 것은 구별과 관련이 있지만, 다르게 사용됩니다. 뚜렷한 (형용사)는 사물 자체의 독창성을 묘사하고 사물 사이의 차이를 강조하는 데 사용됩니다. 뚜렷한 (동사)는 구별 행동이나 능력을 나타내며 차별 과정을 설명하는 데 사용됩니다. 프로그래밍에서 구별은 종종 중복 제거 작업과 같은 컬렉션에서 요소의 독창성을 나타내는 데 사용됩니다. 홀수 및 짝수 숫자를 구별하는 것과 같은 알고리즘이나 함수의 설계에 별개가 반영됩니다. 최적화 할 때 별도의 작업은 적절한 알고리즘 및 데이터 구조를 선택해야하며, 고유 한 작업은 논리 효율성의 구별을 최적화하고 명확하고 읽을 수있는 코드 작성에주의를 기울여야합니다.

이해하는 방법! x는? 이해하는 방법! x는? Apr 03, 2025 pm 02:33 PM

! x 이해! x는 C 언어로 된 논리적 비 운영자입니다. 그것은 x의 값, 즉 실제 변경, 거짓, 잘못된 변경 사항을 부수합니다. 그러나 C의 진실과 거짓은 부울 유형보다는 숫자 값으로 표시되며, 0이 아닌 것은 참으로 간주되며 0만이 거짓으로 간주됩니다. 따라서! x는 음수를 양수와 동일하게 처리하며 사실로 간주됩니다.

C 언어에서 합계는 무엇을 의미합니까? C 언어에서 합계는 무엇을 의미합니까? Apr 03, 2025 pm 02:36 PM

합에 대한 C에는 내장 합계 기능이 없지만 다음과 같이 구현할 수 있습니다. 루프를 사용하여 요소를 하나씩 축적합니다. 포인터를 사용하여 요소를 하나씩 액세스하고 축적합니다. 큰 데이터 볼륨의 경우 병렬 계산을 고려하십시오.

H5 페이지 생산에는 지속적인 유지 보수가 필요합니까? H5 페이지 생산에는 지속적인 유지 보수가 필요합니까? Apr 05, 2025 pm 11:27 PM

코드 취약점, 브라우저 호환성, 성능 최적화, 보안 업데이트 및 사용자 경험 개선과 같은 요소로 인해 H5 페이지를 지속적으로 유지해야합니다. 효과적인 유지 관리 방법에는 완전한 테스트 시스템 설정, 버전 제어 도구 사용, 페이지 성능을 정기적으로 모니터링하고 사용자 피드백 수집 및 유지 관리 계획을 수립하는 것이 포함됩니다.

58.com 작업 페이지에서 실시간 응용 프로그램 및 뷰어 데이터를 얻는 방법은 무엇입니까? 58.com 작업 페이지에서 실시간 응용 프로그램 및 뷰어 데이터를 얻는 방법은 무엇입니까? Apr 05, 2025 am 08:06 AM

크롤링하는 동안 58.com 작업 페이지의 동적 데이터를 얻는 방법은 무엇입니까? Crawler 도구를 사용하여 58.com의 작업 페이지를 크롤링 할 때는이 문제가 발생할 수 있습니다.

사랑 코드 복사 및 붙여 넣기 복사하여 사랑 코드를 무료로 붙여 넣으십시오. 사랑 코드 복사 및 붙여 넣기 복사하여 사랑 코드를 무료로 붙여 넣으십시오. Apr 04, 2025 am 06:48 AM

코드 복사 및 붙여 넣기는 불가능하지는 않지만주의해서 처리해야합니다. 코드의 환경, 라이브러리, 버전 등과 같은 종속성은 현재 프로젝트와 일치하지 않으므로 오류 또는 예측할 수없는 결과를 초래할 수 있습니다. 파일 경로, 종속 라이브러리 및 Python 버전을 포함하여 컨텍스트가 일관되게 유지하십시오. 또한 특정 라이브러리의 코드를 복사 및 붙여 넣을 때 라이브러리 및 해당 종속성을 설치해야 할 수도 있습니다. 일반적인 오류에는 경로 오류, 버전 충돌 및 일관되지 않은 코드 스타일이 포함됩니다. 성능 최적화는 코드의 원래 목적 및 제약에 따라 재 설계 또는 리팩토링되어야합니다. 복사 코드를 이해하고 디버그하고 맹목적으로 복사하여 붙여 넣지 않는 것이 중요합니다.

See all articles