Para que serve o MATLAB?Por que é tão utilizado pelas universidades?Quando é melhor que Python?[fechado]

StackOverflow https://stackoverflow.com/questions/179904

  •  05-07-2019
  •  | 
  •  

Pergunta

Recentemente, fui solicitado a aprender alguns princípios básicos do MATLAB para uma aula.

O que o torna tão legal para pesquisadores e pessoas que trabalham na universidade?Vi que é legal trabalhar com matrizes e plotar coisas...(coisas que podem ser feitas facilmente em Python usando algumas bibliotecas).

Escrever uma função ou analisar um arquivo é simplesmente doloroso.Ainda estou no começo, o que estou perdendo?

No mundo "real", em que devo pensar em usá-lo?Quando deveria ser melhor que o Python?Para melhor, quero dizer:maneira fácil de escrever algo performático.


ATUALIZAÇÃO 1: Uma das coisas que eu mais gostaria de saber é "Estou perdendo alguma coisa?" : D

ATUALIZAÇÃO 2: Obrigado por suas respostas.Minha dúvida não é comprar ou não comprar MATLAB.A universidade tem a possibilidade de me fornecer uma cópia de uma versão antiga do MATLAB (MATLAB 5, eu acho) gratuitamente, sem quebrar a licença.Estou interessado nas suas capacidades e se merece um estudo mais aprofundado (não precisarei de nada mais do que básico MATLAB para passar no exame :P) será realmente melhor que Python para um tipo específico de tarefa no mundo real.

Foi útil?

Solução

Adam está apenas parcialmente certo. Muitos, se não a maioria, os matemáticos nunca vão tocá -lo. Se houver uma ferramenta de computador usada, será algo como Mathematica ou Bordo. Os departamentos de engenharia, por outro lado, geralmente confiam nele e há definitivamente coisas úteis para alguns matemáticos aplicados. Também é usado fortemente na indústria em algumas áreas.

Algo que você precisa perceber sobre o Matlab é que ele começou como um invólucro Fortran Bibliotecas para álgebra linear. Por um longo tempo, teve uma atitude de que "todo o mundo é uma variedade de duplas (carros alegóricas)". Como idioma, ele cresceu muito organicamente, e existem algumas falhas que são muito assadas, se você olhar como uma linguagem de programação.

No entanto, se você considerá -lo um ambiente para fazer certos tipos de pesquisa, ele tem alguns pontos fortes reais. É tão bom quanto é para fazer álgebra linear de ponto flutuante. A notação é simples e poderosa, a implementação rápida e confiável. É muito bom em gerar gráficos e outras tarefas interativas. Há um grande número de "caixas de ferramentas" com um bom código para tarefas específicas, que são acessíveis. Há uma grande comunidade de usuários que compartilham códigos numéricos (Python + Numpy não tem nada na mesma liga, pelo menos ainda)

Python, verrugas e tudo, é uma linguagem de programação muito melhor (como muitos outros). No entanto, é uma década mais ou menos para trás em termos de ferramentas.

O ponto principal é que a maioria das pessoas que usam o MATLAB não são realmente programadores e não querem ser.

É uma escolha ruim para uma linguagem geral de programação; É peculiar, lento para muitas tarefas (você precisa vetorizar as coisas para obter códigos eficientes) e não é fácil integrar -se ao mundo exterior. Por outro lado, para as coisas em que é bom, é muito bom. Muito poucas coisas se comparam. Há uma empresa com apoio razoável e quem sabe quantos homens-anos se dedicam a ela. Isso pode importar na indústria.

Olhando rigorosamente para a comparação do Python vs. Matlab, são principalmente ferramentas diferentes para trabalhos diferentes. Nas áreas em que elas se sobrepõem um pouco, é difícil dizer qual é o melhor caminho a seguir (depende muito do que você está tentando fazer). Mas principalmente Python não é tão bom nos pontos fortes do Matlab e vice -versa.

Outras dicas

A maioria das respostas não entende o que quero dizer.

Há UMA razão pela qual o matlab é tão bom e tão amplamente utilizado:

CODIFICAÇÃO EXTREMAMENTE RÁPIDA

Sou estudante de doutorado em visão computacional e uso matlab há 4 anos. Antes do meu doutorado eu usava diferentes linguagens, incluindo C++, java, php, python...A maioria dos pesquisadores de visão computacional usa exclusivamente matlab.

1) Os pesquisadores precisam de prototipagem rápida

No ambiente de pesquisa, temos (espero) muitas vezes ideias novas e queremos testá-las rapidamente para ver se vale a pena continuar nessa direção.E na maioria das vezes apenas uma pequena subparte do que codificamos será útil.

Matlab é frequentemente mais lento no tempo de execução, mas não nos importamos muito.Como não sabemos de antemão qual método terá sucesso, temos que tentar muitas coisas, então nosso gargalo é o tempo de programação, porque nosso código geralmente será executado algumas vezes para que os resultados sejam publicados e isso é tudo.

Então, vamos ver como o matlab pode ajudar.

2) Tudo que preciso já está aí

O Matlab tem muitas funções que eu preciso, para não precisar reinventá-las o tempo todo:

altere o índice de uma matriz para coordenada 2d: ind2sub extraia todos os patches de uma imagem: im2col;calcular um histograma de uma imagem: hist(Im(:));encontre os elementos únicos em uma lista unique(list);adicionar um vetor a todos os vetores de uma matriz bsxfun(@plus,M,V);convolução em matrizes n-dimensionais convn(A);calcule o tempo de cálculo de uma subparte do código: tic; %%code; toc;interface gráfica para cortar uma imagem: imcrop(im);

A lista pode ser muito longa...E são muito fáceis de encontrar usando a ajuda.

O mais próximo disso é python... Mas é uma chatice em python, tenho que ir ao Google toda vez para procurar o nome da função que preciso, e então preciso adicionar pacotes, e os pacotes não são compatíveis um com o outro, o formato da matriz muda, a função de convolução só lida com doubles mas não comete erro quando dou char, apenas dá uma saída errada...não

3) IDE

Um exemplo:Eu inicio um script.Produz um erro por causa de uma matriz. Ainda posso executar código com a linha de comando. Eu visualizo isso fazendo: imagesc(matrix).Vejo que a última linha da matriz é estranha.Eu conserto o bug. Todas as variáveis ​​ainda estão definidas.Seleciono o restante do código, pressiono F9 para executar a seleção e tudo continua. A depuração se torna rápida, graças a isso.

Matlab sublinha alguns dos meus erros antes da execução.Assim posso ver rapidamente os problemas.Ele propõe alguma maneira de tornar meu código mais rápido.

Há um incrível analisador incluído no IDE.KCahcegrind é muito chato de usar em comparação com isso.

os IDEs do python são incríveis.python sem ipython não é utilizável.Nunca consigo depurar usando ipython.

+preenchimento automático, ajuda para argumentos de função,...

4) Código conciso

Para normalizar todas as colunas de uma matriz (que preciso o tempo todo), faço:bsxfun(@times,A,1./sqrt(sum(A.^2)))

Para remover de uma matriz todas as colunas com soma pequena:

A(:,sum(A)<e)=[]

Para fazer o cálculo na GPU:

gpuX = gpuarray(X); 
%%% code normally and everything is done on GPU

Para paralizar meu código:

parfor n=1:100
%%% code normally and everything is multi-threaded

Que linguagem pode vencer isso?

E claro, raramente preciso fazer loops, tudo está incluso em funções, o que facilita a leitura do código, e sem dor de cabeça com índices.Assim posso focar no que quero programar, não em como programá-lo.

5) Ferramentas de plotagem

Matlab é famoso por suas ferramentas de plotagem.Eles são muito úteis.

As ferramentas de plotagem do Python têm muito menos recursos.Mas há uma coisa super chata.Você pode traçar figuras apenas uma vez por roteiro???se eu tiver um script longo, não consigo exibir itens em cada etapa ---> inútil.

6) Documentação

Tudo é de acesso muito rápido, tudo é cristalino, os nomes das funções são bem escolhidos.Com python, eu sempre preciso pesquisar coisas no Google, procurar em fóruns ou stackoverflow....devorador de tempo completo.

PS:Finalmente, o que eu odeio no matlab:Seu preço

Eu uso o MATLAB há muitos anos em minha pesquisa. É ótimo para álgebra linear e possui um grande conjunto de caixas de ferramentas bem escritas. As versões mais recentes estão começando a empurrá-lo a estar mais perto de uma linguagem de uso geral (melhores otimizadores, um modelo de objeto muito melhor, regras de escopo mais ricas etc.).

No verão passado, tive um emprego em que usei Python + Numpy em vez de Matlab. Gostei da mudança de ritmo. É uma linguagem "real" (e tudo isso implica), e possui ótimos recursos numéricos, como transmitir matrizes. Eu também gosto muito do ambiente ipython.

Aqui estão algumas coisas que eu prefiro sobre o Matlab:

  • consistência: O Mathworks gastou muito esforço fazendo com que as caixas de ferramentas pareçam e funcionassem como uma com a outra. Eles não fizeram um trabalho perfeito, mas é um dos melhores que eu já vi para uma base de código que tem décadas de idade.
  • documentação: Acho muito frustrante descobrir algumas coisas em Numpy e/ou Python porque a qualidade da documentação é irregular: algumas coisas estão documentadas muito bem, outras não. Muitas vezes é mais frustrante quando vejo coisas que parecem imitar o matlab, mas não bastante funcionar da mesma forma. Ser capaz de pegar a fonte é inestimável (para ser justo, a maioria das caixas de ferramentas do Matlab também é fornecida com fonte)
  • compactação: Para o que eu faço, a sintaxe do Matlab geralmente é mais compacta (mas nem sempre)
  • Momento: Eu tenho muito código MATLAB para mudar agora

Se eu não tivesse uma base de código existente tão grande, consideraria seriamente mudar para Python + Numpy.

Segure tudo. Quando foi a última vez que você programou sua calculadora para jogar tetris? Você realmente achou que poderia escrever o que quiser naqueles 128k de RAM? Provavelmente não. O MATLAB não é para programação, a menos que você esteja lidando com enormes matrizes. É a calculadora gráfica que você retira quando tem megabytes para gigabytes de dados para triturar e/ou plotagem. Aprenda apenas coisas básicas, mas também não se mate tentando fazer Python ser uma calculadora gráfica.

Você terá rapidamente uma ideia quando quiser triturar, planejar ou explorar no Matlab e quando quiser ter todas as ofertas do Python. Muitos engenheiros recorrem ao pré e pós -processamento em Python ou Perl. Ocasionalmente, apenas chamando o Matlab para os pedaços duros.

São ferramentas tão diferentes que você deve aprender primeiro a seus pontos fortes, sem tentar substituir um pelo outro. Concedido para economizar dinheiro, eu usaria Octave ou economizava à facilidade e aprendia a trabalhar com matrizes esparsas em Perl ou Python.

MATLAB é ótimo para manipular arrays, executar funções matemáticas especializadas e criar gráficos interessantes rapidamente.

Eu provavelmente só o usaria para programas grandes se pudesse usar muita manipulação de array/matriz.

Você não precisa se preocupar tanto com o IDE quanto com pacotes mais formais, então é mais fácil para estudantes sem muita experiência em programação aprenderem.

O MATLAB é um pedaço popular e amplamente adaptado de um sofisticado pacote de software. Seria um erro pensar que é apenas um software de matemática, pois possui uma ampla gama de "caixas de ferramentas". Eu usei recentemente Matplotlib Para plotar alguns dados de um banco de dados e fizeram o trabalho sem precisar de todos os sinos e assobios do MATLAB. No entanto, pode não ser apropriado comparar Python e Matlab em todas as situações. Como tudo o mais, a decisão depende do que você precisa fazer.

Usei o MATLAB em graduação para design e simulação de sistemas de controle e também para processamento de imagens na pós -graduação. Para esses campos, o Matlab faz mais sentido devido ao poderoso controle e caixas de ferramentas de processamento de imagem. Como todos mencionaram, as operações de matriz, que são usadas em todos os scripts do MATLAB que você precisaria escrever, são muito fáceis com o MATLAB.

Outra coisa boa sobre o Matlab é que é muito fácil e rápido fazer prototipagem e experimentar idéias usando as funções de caixa de ferramentas embutidas. Por exemplo, não é preciso esforço para importar uma imagem e calcular o histograma ou fazer algum processamento simples nela. Uma desvantagem do Matlab pode ser a velocidade por causa de sua natureza interpretada. No entanto, se alguém realmente precisar de velocidade, ele pode optar por implementar a lógica testada em C/C ++, etc.

Para uma comparação adicional com o Python, posso dizer que o Matlab fornece um pacote completo para você fazer seu trabalho sem a necessidade de procurar bibliotecas externas e implementar funções extras.

Um último ponto sobre o Matlab que vejo não é mencionado nas respostas aqui é que ele tem um ambiente de modelagem/simulação visual muito poderoso chamado Simulink. É mais fácil projetar e simular sistemas maiores com simulink.

Finalmente, novamente, tudo depende do problema que você precisa resolver. Se o seu domínio do seu problema puder usar uma das caixas de ferramentas do MATLAB e você tiver acesso ao MATLAB, poderá ter certeza de que terá a ferramenta certa para resolvê -lo.

O Matlab, como mencionado por outros, é ótimo na manipulação da matriz e foi originalmente construído como uma extensão do conhecido Blas e Lapack Bibliotecas usadas para álgebra linear. Ele interfina bem com outros idiomas como o Java e é bem preferido por empresas de engenharia e científicas por suas bibliotecas bem desenvolvidas e documentadas. Pelo que sei de Python e Numpy, enquanto eles compartilham muitas das capacidades fundamentais do MATLAB, eles não têm toda a amplitude e profundidade das capacidades com suas bibliotecas.

Pessoalmente, uso o Matlab porque foi o que aprendi no meu estágio, foi o que usei na pós -graduação, e foi isso que usei no meu primeiro trabalho. Não tenho nada contra o Python (ou qualquer outro idioma). É exatamente o que estou usado também.

Além disso, há outra versão gratuita, além do Scilab mencionado por @Jim c de GNU chamado Oitava.

Pessoalmente, eu tendem a pensar no MATLAB como uma calculadora de matriz interativa e uma ferramenta de plotagem com alguns recursos de script, e não como uma linguagem de programação completa, como python ou C. A caixa e você pode fazer algumas coisas muito específicas nela, praticamente sem conhecimento de programação real. O idioma é, como você aponta, extremamente frustrante de usar para tarefas de uso mais geral, como o processamento de cordas mais simples. Sua sintaxe é peculiar e não foi criada com as abstrações necessárias para projetos de mais de 100 linhas ou mais em mente.

Eu acho que a razão pela qual as pessoas tentam usar o MATLAB como uma linguagem de programação séria é que a maioria dos engenheiros (existem exceções; meu diploma é em engenharia biomédica e gosto de programação) são programadores horríveis e odeiam programar. Eles são ensinados Matlab na faculdade principalmente para a matriz Matrix e aprendem alguma programação rudimentar como parte do aprendizado do Matlab e apenas assumem que o Matlab é bom o suficiente. Não consigo pensar em ninguém que conheço quem conhece qualquer idioma além do Matlab, mas ainda usa o Matlab para algo que não seja alguns aplicativos de trituração de números puros.

A razão mais provável que é usada tanto nas universidades é que a faculdade de matemática está acostumada, entenda e saiba como incorporá -la ao currículo deles.

Entre matplotlib+pylab e Numpy Eu não acho que haja muita diferença real entre Matlab e Python, além de inércia cultural, conforme sugerido por @adam bellaire.

Eu acredito que você tem um ponto muito bom e é um que foi criado na empresa onde eu trabalho. A empresa é limitada na capacidade de aplicar o MATLAB devido aos custos de licenciamento envolvidos. Um desenvolvedor provou que o Python era um substituto muito adequado, mas caiu em ouvidos ignorantes porque para os proprietários desses ouvidos ...

  1. Ninguém na empresa conhecia Python, embora muitos de nós quisessem usá-lo.
  2. O Matlab tem um nome, uma empresa e força -tarefa por trás dele para resolver quaisquer problemas.
  3. Havia alguns (mas não muito) de projetos Matlab legados que precisariam ser reescritos.

Se vale a pena £ 10.000 (??), deve valer a pena !!

Estou com você aqui. O Python é um substituto muito bom para o MATLAB.

Devo ressaltar que me disseram que a empresa usa talvez 5% a 10% dos recursos do Matlabs e essa é a base do meu acordo com o pôster original

Matlab é uma ferramenta fantástica para

  • prototipagem
  • Simulação de engenharia e
  • Visualização rápida dos dados

Você pode realmente brincar, visualizar e testar suas idéias em um conjunto de dados com muita eficácia. Não deve ser considerado uma alternativa a outras linguagens de software usadas para o desenvolvimento de produtos. Eu recomendo para as tarefas acima, embora seja caro - alternativas gratuitas como Oitava E Python está alcançando.

Parece ser pura inércia. Onde está em uso, todo mundo está ocupado demais para aprender IDL ou Numpy em detalhes suficientes para alternar, e não deseja reescrever bons programas de trabalho. Felizmente, isso não é estritamente verdadeiro, mas verdadeiro o suficiente em lugares suficientes para que o Matlab demore muito tempo. Como fortran (em uso ativo onde eu trabalho!)

A principal razão pela qual é útil na indústria são os plug-ins construídos sobre a funcionalidade principal. Quase todo o desenvolvimento ativo do MATLAB nos últimos anos se concentrou neles.

Infelizmente, você não terá muita oportunidade de usá -los em um ambiente acadêmico.

Sei que essa pergunta é antiga e, portanto, pode não ser mais assistida, mas achei que era necessário comentar. Como engenheiro aeroespacial da Georgia Tech, posso dizer, sem escrúpulos, que o Matlab é incrível. Você pode fazê -lo interface rapidamente com suas planilhas do Excel para obter dados sobre como os foguetes altos e rápidos estão voando, como o vento afeta esses mesmos foguetes e quão diferentes os motores são importantes. Além dos foguetes, conceitos semelhantes entram em jogo para carros, caminhões, aeronaves, naves espaciais e até atletismo. Você pode extrair grandes quantidades de dados, manipular tudo isso e garantir que seus resultados sejam como devem ser. No caso de algo estar desligado, você pode adicionar uma quebra de linha em que ocorre um erro para depurar seu programa sem precisar recompilar toda vez que deseja executar seu programa. É mais lento do que alguns outros programas? Bem, tecnicamente. Tenho certeza de que, se você deseja fazer o número de trituração, é ótimo para um processador gráfico da NVIDIA, provavelmente seria mais rápido, mas requer muito mais esforço com depuração mais difícil.

Como linguagem geral de programação, o MATLAB é fraco. Não é para funcionar contra Python, Java, ActionScript, C/C ++ ou qualquer outro idioma de uso geral. É para o nicho de engenharia e matemática que o nome implica, e faz isso de maneira fantástica.

O Matlab era um invólucro em torno de bibliotecas comumente disponíveis. E em muitos casos ainda é. Quando você chega a conjuntos de dados maiores, ele possui muitas otimizações adicionais, incluindo o exame e os problemas comuns do revestimento especial (reduzindo matrizes esparsas quando úteis, por exemplo) e lidando com casos de borda. Freqüentemente, você pode enviar um problema em um formulário padrão para uma função geral e ele determinará o melhor algoritmo subjacente a ser usado com base nos seus dados. Para N Small, todos os algoritmos são rápidos, mas o MATLAB faz com que a determinação do algoritmo ideal não seja um problema.

Isso foi escrito por alguém que odeia o Matlab e tentou substituí -lo devido a problemas de integração. Da sua pergunta, você menciona obter o Matlab 5 e usá -la para um curso. Nesse nível, você pode querer olhar paraOitava, uma implementação de código aberto com a mesma sintaxe. Acho que está de acordo com os níveis do Matlab 5 até agora (eu só brinco com ele). Isso deve permitir que você "passe seu exame". Para a funcionalidade nua do Matlab, parece estar próximo. Falta no suporte da caixa de ferramentas (que, novamente, serve principalmente para reformular as chamadas de função para os formulários familiares para os engenheiros do campo e seleciona o algoritmo subjacente à direita para usar).

Uma das razões pelas quais o Matlab é popular entre as universidades é a mesma razão pela qual muitas coisas são populares entre as universidades: há muitos professores familiarizados com ela e é bastante robusta.

Conversei com muitas pessoas que estão especialmente interessadas na capacidade nascente do MATLAB de explorar a GPU em vez de trabalhar em série. Tendo usado o Python na pós -graduação, eu meio que gostaria de ter lambidas para trabalhar com o MATLAB nesse caso. Com certeza tornaria os cálculos do espaço vetorial uma brisa.

Já faz algum tempo desde que eu usei o MATLAB, mas da memória fornece (embora com plugins extras) a capacidade de gerar fonte para permitir que você realize seu algoritmo em um DSP.

Como o Python é uma linguagem de programação de uso geral, não há razão para você não poder fazer tudo no Python que pode fazer no Matlab. No entanto, o MATLAB fornece várias outras ferramentas - por exemplo. Uma variedade muito ampla de recursos do DSP, uma ampla variedade de recursos do domínio S e Z.

Tudo isso pode ser codificado à mão em Python (já que é uma linguagem de uso geral), mas se você procura, os resultados talvez gastem o dinheiro no MATLAB seja a opção mais barata?

Esses recursos também foram ajustados para o desempenho. por exemplo. A documentação para Numpy especifica que sua transformação de Fourier é otimizada para poder de 2 pontos de dados. Como eu entendo, o MATLAB foi escrito para usar a transformação de Fourier mais eficiente para se adequar ao tamanho do conjunto de dados, não apenas da potência de 2.

EDIT: Ah, e no Matlab, você pode produzir alguns sensacionais Procurando Plotas com muita facilidade, o que é importante quando você está apresentando seus dados. Novamente, certamente não é impossível usar outras ferramentas.

Eu acho que você respondeu sua própria pergunta quando observou que o MATLAB é "legal de trabalhar com matrizes e planejar as coisas". Qualquer aplicação que exija muita matriz matemática e visualização provavelmente será mais fácil de fazer no MATLAB.

Dito isto, a sintaxe do MATLAB parece estranha e mostra a idade da linguagem. Por outro lado, o Python é uma linguagem de programação de uso geral muito mais agradável e, com as bibliotecas certas pode fazer muito do que o Matlab faz. No entanto, o MATLAB sempre terá uma sintaxe mais concisa que o Python para manipulação de vetor e matriz.

Se grande parte da sua programação envolve esses tipos de manipulações, como no processamento de sinais e algumas técnicas estatísticas, o MATLAB será uma escolha melhor.

Vantagem do primeiro motor. Matlab existe desde o final da década de 1970. O Python apareceu mais recentemente, e as bibliotecas que o tornam adequado para tarefas do tipo Matlab surgiram ainda mais recentemente. As pessoas estão acostumadas a Matlab, então elas o usam.

O MATLAB é bom em fazer a trituração de números. Também manipulação de matriz e matriz. Ele possui muitas bibliotecas incorporadas e, depende da versão qual), acho que é mais fácil de usar do que o Python se você estiver calculando as equações.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top