MATLAB의 장점은 무엇입니까? 대학에서 왜 그렇게 사용합니까? 언제 파이썬보다 낫습니까?
저는 최근에 수업에 대한 몇 가지 MATLAB 기본 사항을 배우라는 요청을 받았습니다.
대학에서 일하는 연구원과 사람들에게 무엇이 그렇게 멋지게 만들까요? 나는 행렬로 작업하고 무언가를 플로팅하는 것이 멋지다는 것을 알았습니다 ... (일부 라이브러리를 사용하여 Python에서 쉽게 수행 할 수있는 작업).
함수를 작성하거나 파일을 구문 분석하는 것은 고통 스럽습니다. 아직 시작 단계에 있는데 무엇을 놓치고 있습니까?
"실제"세계에서 무엇을 위해 사용해야합니까? 언제 파이썬보다 더 잘할 수 있습니까? 더 나은 의미는 수행하는 것을 작성하는 쉬운 방법입니다.
업데이트 1 : 내가 가장 알고 싶은 것 중 하나는 "내가 뭔가를 놓치고 있는가?"입니다. :디
업데이트 2 : 답변 해 주셔서 감사합니다. 제 질문은 MATLAB 구입 여부에 관한 것이 아닙니다. 대학에서는 라이선스를 해지하지 않고 MATLAB의 이전 버전 (내 생각에는 MATLAB 5)의 사본을 무료로 제공 할 수 있습니다. 나는 그 기능에 관심이 있고 더 깊은 연구가 필요하다면 ( 시험에 합격하기 위해 기본 MATLAB 이상이 필요하지 않을 것입니다 : P) 실제 작업의 특정 종류에 대해 Python보다 낫습니다. 세계.
아담은 부분적으로 만 옳습니다. 대부분은 아니더라도 많은 수학자들은 결코 그것을 만지지 않을 것입니다. 컴퓨터 도구가 전혀 사용되지 않는다면 Mathematica 나 Maple 같은 것이 될 것 입니다. 반면에 엔지니어링 부서는 종종 그것에 의존하며 일부 응용 수학자에게는 확실히 유용한 것들이 있습니다. 또한 일부 분야의 산업에서 많이 사용됩니다.
MATLAB에 대해 알아야 할 점은 선형 대수학을위한 Fortran 라이브러리 의 래퍼로 시작되었다는 것 입니다. 오랫동안 "모든 세상은 복식 (수레)의 배열"이라는 태도를 가지고있었습니다. 언어로서, 그것은 매우 유기적으로 성장했고, 프로그래밍 언어로 보면 아주 많이 구워진 몇 가지 결함이 있습니다.
그러나 특정 유형의 연구를 수행 할 수있는 환경으로 보면 실제 강점이 있습니다. 부동 소수점 선형 대수를 수행하는 것만큼이나 좋습니다. 표기법은 간단하고 강력하며 구현이 빠르고 신뢰할 수 있습니다. 플롯 및 기타 상호 작용 작업을 생성하는 데 매우 유용합니다. 합리적인 가격의 특정 작업에 적합한 코드가 포함 된 많은 '도구 상자'가 있습니다. 숫자 코드를 공유하는 대규모 사용자 커뮤니티가 있습니다 (Python + NumPy 는 적어도 아직 동일한 리그에 없습니다).
파이썬, 사마귀 등은 훨씬 더 나은 프로그래밍 언어입니다 (다른 많은 언어와 마찬가지로). 그러나 도구 측면에서는 10 년 정도 뒤쳐졌습니다.
요점은 MATLAB을 사용하는 대부분의 사람들이 실제로 프로그래머가 아니며되기를 원하지 않는다는 것입니다.
일반적인 프로그래밍 언어로는 엉뚱한 선택입니다. 기발하고 많은 작업에 느리며 (효율적인 코드를 얻기 위해 벡터화해야 함) 외부 세계와 통합하기가 쉽지 않습니다. 반면에, 그것이 잘하는 것에 대해서는 매우 훌륭합니다. 비교되는 것은 거의 없습니다. 합리적인 지원을 제공하고 그 회사에 몇 명의 인력을 투입했는지 아는 회사가 있습니다. 이것은 업계에서 중요 할 수 있습니다.
Python과 MATLAB 비교를 엄격하게 살펴보면 대부분 작업에 따라 다른 도구입니다. 그들이 약간 겹치는 영역에서는 더 나은 경로가 무엇인지 말하기가 어렵습니다 (당신이하려는 것에 많이 달려 있습니다). 그러나 대부분 Python은 MATLAB의 핵심 강점에 그다지 뛰어나지 않으며 그 반대도 마찬가지입니다.
대부분의 답변은 요점을 얻지 못합니다.
matlab이 매우 훌륭하고 널리 사용되는 한 가지 이유가 있습니다.
매우 빠른 코딩
저는 컴퓨터 비전 박사 과정 학생이고 4 년 동안 matlab을 사용해 왔습니다. 박사 학위를 받기 전에는 C ++, 자바, PHP, 파이썬 등 다양한 언어를 사용했습니다 ... 대부분의 컴퓨터 비전 연구자들은 독점적으로 matlab을 사용하고 있습니다.
1) 연구원은 빠른 프로토 타이핑이 필요합니다.
연구 환경에서 우리는 종종 새로운 아이디어를 가지고 있으며, 그 방향으로 계속할 가치가 있는지 확인하기 위해 정말 빨리 테스트하고 싶습니다. 그리고 대부분 우리가 코딩하는 것의 아주 작은 부분 만이 유용 할 것입니다.
Matlab은 종종 실행 시간에 느리지 만 우리는별로 신경 쓰지 않습니다. 어떤 방법이 성공할지 미리 알지 못하기 때문에 많은 것을 시도해야합니다. 그래서 우리의 병목은 프로그래밍 시간입니다 . 왜냐하면 우리 코드는 결과를 게시하기 위해 가장 자주 몇 번 실행되기 때문입니다. 모두.
이제 MATLAB이 어떻게 도움이되는지 살펴 보겠습니다.
2) 필요한 모든 것이 이미 있습니다.
Matlab에는 내가 필요한 기능이 정말 많기 때문에 항상 재창조 할 필요가 없습니다.
행렬의 인덱스를 2D 좌표로 변경 : ind2sub
이미지의 모든 패치를 추출합니다. im2col
; 이미지의 히스토그램을 계산합니다. hist(Im(:))
; 목록에서 고유 한 요소를 찾습니다 unique(list)
. 행렬의 모든 벡터에 벡터를 추가합니다 bsxfun(@plus,M,V)
. n 차원 배열의 컨볼 루션 convn(A)
; 코드 하위 부분의 계산 시간을 계산합니다. tic; %%code; toc
; 이미지를 자르는 그래픽 인터페이스 : imcrop(im)
;
목록은 매우 길 수 있습니다. 도움말을 사용하면 쉽게 찾을 수 있습니다.
가장 가까운 것은 파이썬 ...하지만 파이썬에서는 고통 스럽습니다. 필요한 함수의 이름을 찾기 위해 매번 Google에 가야합니다. 그런 다음 패키지를 추가해야하며 패키지가 호환되지 않습니다. 서로, 행렬의 형식 변경, convolution 함수는 double 만 처리하지만 char를 줄 때 오류를 만들지 않고 잘못된 출력을 제공합니다.
3) IDE
예 : 스크립트를 시작합니다. 행렬 때문에 오류가 발생합니다. 여전히 명령 줄로 코드를 실행할 수 있습니다. 나는 그것을 다음과 같이 시각화합니다 imagesc(matrix)
. 행렬의 마지막 줄이 이상하다는 것을 알았습니다. 버그를 수정합니다. 모든 변수는 여전히 설정 됩니다. 나머지 코드를 선택하고 F9 키를 눌러 선택을 실행하면 모든 작업이 진행됩니다. 덕분에 디버깅 속도가 빨라집니다 .
Matlab은 실행하기 전에 내 오류 중 일부에 밑줄을 긋습니다. 그래서 빨리 문제를 볼 수 있습니다. 내 코드를 더 빠르게 만드는 방법을 제안합니다.
IDE에 포함 된 멋진 프로파일 러 가 있습니다. KCahcegrind는 그것에 비해 사용하기가 너무 고통 스럽습니다.
파이썬의 IDE는 굉장합니다. ipython이없는 python은 사용할 수 없습니다. 나는 ipython을 사용하여 디버깅을 관리하지 않습니다.
+ 자동 완성, 함수 인수에 대한 도움말, ...
4) 간결한 코드
행렬의 모든 열 (항상 필요함)을 정규화하려면 다음을 수행합니다. bsxfun(@times,A,1./sqrt(sum(A.^2)))
작은 합계가있는 모든 열을 행렬에서 제거하려면 :
A(:,sum(A)<e)=[]
GPU에서 계산을 수행하려면 다음을 수행하십시오 .
gpuX = gpuarray(X);
%%% code normally and everything is done on GPU
내 코드를 병렬화하려면 :
parfor n=1:100
%%% code normally and everything is multi-threaded
어떤 언어로 이길 수 있습니까?
물론 루프를 만들 필요가 거의 없으며 모든 것이 함수에 포함되어있어 코드를 더 쉽게 읽을 수 있고 인덱스로 인한 골칫거리가 없습니다. 그래서 프로그래밍 방법이 아니라 프로그래밍하려는 것에 집중할 수 있습니다.
5) 플로팅 도구
Matlab은 플로팅 도구로 유명합니다. 그들은 매우 도움이됩니다.
Python의 플로팅 도구는 기능이 훨씬 적습니다. 그러나 한 가지 매우 성가신 것이 있습니다. 스크립트 당 한 번만 그림을 그릴 수 있습니다. ??? 스크립트가 있으면 각 단계에서 물건을 표시 할 수 없습니다 ---> 쓸모 없습니다.
6) 문서
모든 것이 매우 빠르게 액세스되고 모든 것이 명확하며 기능 이름이 잘 선택됩니다. 파이썬을 사용하면 항상 Google 물건을 검색하고 포럼이나 stackoverflow를 살펴 봐야합니다.
PS : 마지막으로 내가 matlab에서 싫어하는 것 : 가격
나는 내 연구에서 수년 동안 matlab을 사용해 왔습니다. 선형 대수에 적합하며 잘 작성된 많은 도구 상자가 있습니다. 최신 버전은 범용 언어 (더 나은 최적화 프로그램, 훨씬 더 나은 객체 모델, 풍부한 범위 지정 규칙 등)에 더 가깝게 만들기 시작했습니다.
지난 여름, Matlab 대신 Python + numpy를 사용하는 직업이있었습니다. 나는 속도의 변화를 즐겼다. 이것은 "실제"언어 (및 그에 수반되는 모든 것)이며 브로드 캐스팅 배열과 같은 훌륭한 숫자 기능을 가지고 있습니다. 나는 또한 ipython 환경을 정말 좋아합니다.
내가 Matlab에 대해 선호하는 몇 가지 사항은 다음과 같습니다.
- 일관성 : MathWorks는 도구 상자가 서로 비슷하게 보이고 작동하도록 많은 노력을 기울였습니다. 그들은 완벽한 일을하지 못했지만 수십 년 된 코드베이스에서 내가 본 것 중 최고 중 하나입니다.
- documentation : 문서 품질이 불안정하기 때문에 numpy 및 / 또는 python에서 몇 가지를 파악하는 것이 매우 실망 스럽습니다. 일부는 문서화가 잘되어 있고 일부는 전혀 문서화되지 않았습니다. 내가 모방 matlab에에 표시되는 것을 볼 수 있지만하지 않는 경우 종종 가장 초조 상당히 동일하게 작동합니다. 소스를 얻을 수 있다는 것은 매우 중요합니다 (공정하게 말하면 대부분의 Matlab 도구 상자도 소스와 함께 제공됩니다).
- 간결함 : 내가하는 일에 대해 Matlab의 구문은 종종 더 간결합니다 (항상 그런 것은 아닙니다)
- 모멘텀 : 지금 변경할 Matlab 코드가 너무 많습니다.
그렇게 큰 기존 코드베이스가 없다면 Python + numpy로 전환하는 것을 진지하게 고려할 것입니다.
다 잡으세요. 테트리스를 재생하도록 계산기를 마지막으로 프로그래밍 한 것이 언제입니까? 실제로 128k RAM에 원하는 것을 쓸 수 있다고 생각 했습니까? 아닐 것 같습니다. MATLAB은 거대한 행렬을 다루지 않는 한 프로그래밍을위한 것이 아닙니다. 메가 바이트에서 기가 바이트의 데이터를 크런치 및 / 또는 플로팅 할 때 사용하는 그래프 계산기입니다. 기본적인 내용 만 배우고 Python을 그래프 계산기로 만들려고 노력하지 마십시오.
MATLAB에서 크런치, 플로팅 또는 탐색을 원할 때와 Python이 제공하는 모든 기능을 원할 때를 빠르게 느낄 수 있습니다. 많은 엔지니어가 Python 또는 Perl에서 사전 및 사후 처리로 전환합니다. 때로는 하드 비트에 대해 MATLAB을 호출하는 경우도 있습니다.
그것들은 완전히 다른 도구이므로 하나를 다른 것으로 교체하지 않고 먼저 기본 강점을 배워야합니다. 돈을 절약하기 위해 저는 Octave를 사용하거나 쉽게 훑어보고 Perl 또는 Python에서 희소 행렬로 작업하는 방법을 배웠습니다.
MATLAB은 배열 조작, 특수 수학 함수 수행 및 멋진 플롯을 빠르게 생성하는 데 적합합니다.
많은 배열 / 행렬 조작을 사용할 수 있다면 큰 프로그램에만 사용할 것입니다.
좀 더 공식적인 패키지만큼 IDE에 대해 걱정할 필요가 없으므로 많은 프로그래밍 경험이없는 학생들이 쉽게 익힐 수 있습니다.
MATLAB은 널리 사용되고 널리 채택 된 정교한 소프트웨어 패키지입니다. 광범위한 "도구 상자"를 가지고 있기 때문에 단순히 수학 소프트웨어라고 생각하는 것은 실수입니다. 저는 최근에 Matplotlib 를 사용 하여 데이터베이스에서 일부 데이터를 플로팅했으며 MATLAB의 모든 종소리와 휘파람없이 작업을 수행했습니다. 그러나 모든 상황에서 Python과 MATLAB을 비교하는 것은 적절하지 않을 수 있습니다. 다른 모든 것과 마찬가지로 결정은 무엇을해야하는지에 따라 달라집니다.
제어 시스템 설계 및 시뮬레이션과 대학원에서의 이미지 처리를 위해 학부에서 MATLAB을 사용했습니다. 이러한 필드의 경우 MATLAB은 강력한 제어 및 이미지 처리 도구 상자로 인해 가장 적합합니다. 모두가 언급했듯이 작성해야하는 모든 MATLAB 스크립트에서 사용되는 배열 연산은 MATLAB을 사용하면 매우 쉽습니다.
MATLAB의 또 다른 좋은 점은 내장 된 도구 상자 함수를 사용하여 프로토 타이핑을하고 아이디어를 시도하는 것이 매우 쉽고 빠르다는 것입니다. 예를 들어, 이미지를 가져 와서 히스토그램을 계산하거나 간단한 처리를 수행하는 데 노력이 필요하지 않습니다. MATLAB의 한 가지 단점은 해석 된 특성으로 인한 속도 일 수 있습니다. 그러나 실제로 속도가 필요한 경우 C / C ++ 등에서 테스트 된 논리를 구현하도록 선택할 수 있습니다.
Python과의 추가 비교를 위해 MATLAB은 외부 라이브러리를 찾아보고 추가 기능을 구현할 필요없이 작업을 수행 할 수있는 전체 패키지를 제공한다고 말할 수 있습니다.
내가 본 MATLAB에 대한 마지막 요점은 여기에 대한 답변에서 언급되지 않았습니다 . Simulink 라는 매우 강력한 시각적 모델링 / 시뮬레이션 환경이 있다는 것 입니다. Simulink를 사용하면 더 큰 시스템을 더 쉽게 설계하고 시뮬레이션 할 수 있습니다.
마지막으로, 모든 것은 해결해야하는 문제에 달려 있습니다. 문제 영역에서 MATLAB의 도구 상자 중 하나를 사용할 수 있고 MATLAB에 액세스 할 수 있다면 문제를 해결하는 데 적합한 도구가 있는지 확인할 수 있습니다.
MATLAB, as mentioned by others, is great at matrix manipulation, and was originally built as an extension of the well-known BLAS and LAPACK libraries used for linear algebra. It interfaces well with other languages like Java, and is well favored by engineering and scientific companies for its well developed and documented libraries. From what I know of Python and NumPy, while they share many of the fundamental capabilities of MATLAB, they don't have the full breadth and depth of capabilities with their libraries.
Personally, I use MATLAB because that's what I learned in my internship, that's what I used in grad school, and that's what I used in my first job. I don't have anything against Python (or any other language). It's just what I'm used too.
Also, there is another free version in addition to scilab mentioned by @Jim C from gnu called Octave.
Personally, I tend to think of Matlab as an interactive matrix calculator and plotting tool with a few scripting capabilities, rather than as a full-fledged programming language like Python or C. The reason for its success is that matrix stuff and plotting work out of the box, and you can do a few very specific things in it with virtually no actual programming knowledge. The language is, as you point out, extremely frustrating to use for more general-purpose tasks, such as even the simplest string processing. Its syntax is quirky, and it wasn't created with the abstractions necessary for projects of more than 100 lines or so in mind.
I think the reason why people try to use Matlab as a serious programming language is that most engineers (there are exceptions; my degree is in biomedical engineering and I like programming) are horrible programmers and hate to program. They're taught Matlab in college mostly for the matrix math, and they learn some rudimentary programming as part of learning Matlab, and just assume that Matlab is good enough. I can't think of anyone I know who knows any language besides Matlab, but still uses Matlab for anything other than a few pure number crunching applications.
The most likely reason that it's used so much in universities is that the mathematics faculty are used to it, understand it, and know how to incorporate it into their curriculum.
Between matplotlib+pylab and NumPy I don't think there's much actual difference between Matlab and python other than cultural inertia as suggested by @Adam Bellaire.
I believe you have a very good point and it's one that has been raised in the company where I work. The company is limited in it's ability to apply matlab because of the licensing costs involved. One developer proved that Python was a very suitable replacement but it fell on ignorant ears because to the owners of those ears...
- No-one in the company knew Python although many of us wanted to use it.
- MatLab has a name, a company, and task force behind it to solve any problems.
- There were some (but not a lot) of legacy MatLab projects that would need to be re-written.
If it's worth £10,000 (??) it's gotta be worth it!!
I'm with you here. Python is a very good replacement for MatLab.
I should point out that I've been told the company uses maybe 5% to 10% of MatLabs capabilities and that is the basis for my agreement with the original poster
MATLAB is a fantastic tool for
- prototyping
- engineering simulation and
- fast visualization of data
You can really play with, visualize and test your ideas on a data set very effectively. It should not be regarded as an alternative to other software languages used for product development. I highly recommend it for the above tasks, though it is expensive - free alternatives like Octave and Python are catching up.
Seems to be pure inertia. Where it is in use, everyone is too busy to learn IDL or numpy in sufficient detail to switch, and don't want to rewrite good working programs. Luckily that's not strictly true, but true enough in enough places that Matlab will be around a long time. Like Fortran (in active use where i work!)
The main reason it is useful in industry is the plug-ins built on top of the core functionality. Almost all active Matlab development for the last few years has focused on these.
Unfortunately, you won't have much opportunity to use these in an academic environment.
I know this question is old, and therefore may no longer be watched, but I felt it was necessary to comment. As an aerospace engineer at Georgia Tech, I can say, with no qualms, that MATLAB is awesome. You can have it quickly interface with your Excel spreadsheets to pull in data about how high and fast rockets are flying, how the wind affects those same rockets, and how different engines matter. Beyond rocketry, similar concepts come into play for cars, trucks, aircraft, spacecraft, and even athletics. You can pull in large amounts of data, manipulate all of it, and make sure your results are as they should be. In the event something is off, you can add a line break where an error occurs to debug your program without having to recompile every time you want to run your program. Is it slower than some other programs? Well, technically. I'm sure if you want to do the number crunching it's great for on an NVIDIA graphics processor, it would probably be faster, but it requires a lot more effort with harder debugging.
As a general programming language, MATLAB is weak. It's not meant to work against Python, Java, ActionScript, C/C++ or any other general purpose language. It's meant for the engineering and mathematics niche the name implies, and it does so fantastically.
MATLAB WAS a wrapper around commonly available libraries. And in many cases it still is. When you get to larger datasets, it has many additional optimizations, including examining and special casing common problems (reducing to sparse matrices where useful, for example), and handling edge cases. Often, you can submit a problem in a standard form to a general function, and it will determine the best underlying algorithm to use based on your data. For small N, all algorithms are fast, but MATLAB makes determining the optimal algorithm a non-issue.
This is written by someone who hates MATLAB, and has tried to replace it due to integration issues. From your question, you mention getting MATLAB 5 and using it for a course. At that level, you might want to look at Octave, an open source implementation with the same syntax. I'm guessing it is up to MATLAB 5 levels by now (I only play around with it). That should allow you to "pass your exam". For bare MATLAB functionality it seems to be close. It is lacking in the toolbox support (which, again, mostly serves to reformulate the function calls to forms familiar to engineers in the field and selects the right underlying algorithm to use).
One reason MATLAB is popular with universities is the same reason a lot of things are popular with universities: there's a lot of professors familiar with it, and it's fairly robust.
I've spoken to a lot of folks who are especially interested in MATLAB's nascent ability to tap into the GPU instead of working serially. Having used Python in grad school, I kind of wish I had the licks to work with MATLAB in that case. It sure would make vector space calculations a breeze.
It's been some time since I've used Matlab, but from memory it does provide (albeit with extra plugins) the ability to generate source to allow you to realise your algorithm on a DSP.
Since python is a general purpose programming language there is no reason why you couldn't do everything in python that you can do in matlab. However, matlab does provide a number of other tools - eg. a very broad array of dsp features, a broad array of S and Z domain features.
All of these could be hand coded in python (since it's a general purpose language), but if all you're after is the results perhaps spending the money on Matlab is the cheaper option?
These features have also been tuned for performance. eg. The documentation for Numpy specifies that their Fourier transform is optimised for power of 2 point data sets. As I understand Matlab has been written to use the most efficient Fourier transform to suit the size of the data set, not just power of 2.
edit: Oh, and in Matlab you can produce some sensational looking plots very easily, which is important when you're presenting your data. Again, certainly not impossible using other tools.
I think you answered your own question when you noted that Matlab is "cool to work with matrixes and plotting things". Any application that requires a lot of matrix maths and visualisation will probably be easiest to do in Matlab.
That said, Matlab's syntax feels awkward and shows the language's age. In contrast, Python is a much nicer general purpose programming language and, with the right libraries can do much of what Matlab does. However, Matlab is always going to have a more concise syntax than Python for vector and matrix manipulation.
If much of your programming involves these sorts of manipulations, such as in signal processing and some statistical techniques, then Matlab will be a better choice.
First Mover Advantage. Matlab has been around since the late 1970s. Python came along more recently, and the libraries that make it suitable for Matlab type tasks came along even more recently. People are used to Matlab, so they use it.
Matlab is good at doing number crunching. Also Matrix and matrix manipulation. It has many helpful built in libraries(depends on the what version) I think it is easier to use than python if you are going to be calculating equations.
ReferenceURL : https://stackoverflow.com/questions/179904/what-is-matlab-good-for-why-is-it-so-used-by-universities-when-is-it-better-th
'programing' 카테고리의 다른 글
Datatables 경고 (table id = 'example') : 데이터 테이블을 다시 초기화 할 수 없습니다. (0) | 2021.01.16 |
---|---|
envsubst : Mac OS X 10.8에서 명령을 찾을 수 없음 (0) | 2021.01.16 |
경로에서 파일 이름을 추출하는 방법은 무엇입니까? (0) | 2021.01.16 |
스토리 보드 사용시 기본 탭 설정 (0) | 2021.01.16 |
Groovy의 목록에서 Null 항목 제거 (0) | 2021.01.16 |