Для чего хороша MATLAB? Почему его так используют университеты? Когда это лучше, чем Python? [закрытый]

меня недавно попросили изучить некоторые основы MATLAB для класса.

Что делает его настолько крутым для исследователей и людей, которые работают в университете? Я видел, как здорово работать с матрицами и строить планы... (вещи, которые можно легко сделать в Python, используя некоторые библиотеки).

запись функции или синтаксический анализ файла просто болезненны. Я еще в начале, что я упускаю?

в "реальном" мире, что я должна его использовать? Когда следует он может сделать лучше, чем питон? Я имею в виду: легкий способ написать что-то выполнять.


обновление 1: одна из вещей, которые я хотел бы знать больше всего "я что-то пропустил?": D

обновление 2: Спасибо за ваши ответы. Мой вопрос не в том, покупать или не покупать MATLAB. Университет имеет возможность дать мне копию старой версии MATLAB (MATLAB 5, я думаю) бесплатно, без нарушения лицензии. Мне интересно по своим возможностям и если он заслуживает более глубокого изучения (мне не понадобится ничего больше, чем basic MATLAB в oder, чтобы сдать экзамен: P) это действительно будет лучше, чем Python для конкретного вида задачи в реальном мире.

21 ответов


Адам прав только частично. Многие, если не большинство, математики никогда не прикоснутся к нему. Если есть компьютерный инструмент, используемый вообще, это будет что-то вроде Mathematica или кленов. Технических отделов, с другой стороны, часто полагаются на него, и есть определенно полезные вещи для некоторых прикладных математиков. Он также широко используется в промышленности в некоторых областях.

то, что вы должны понять о MATLAB, заключается в том, что он начинался как обертка на Фортран библиотеки для линейной алгебры. Долгое время у него было отношение, что "весь мир-это массив двойников (поплавков)". Как язык, он вырос очень органично, и есть некоторые недостатки, которые очень запечены, если вы посмотрите на него просто как на язык программирования.

однако, если вы посмотрите на него как на среду для проведения определенных видов исследований, у него есть некоторые реальные сильные стороны. Это примерно так же хорошо, как и для линейного с плавающей точкой алгебра. Обозначение простое и мощное, реализация быстрая и надежная. Он очень хорошо генерирует сюжеты и другие интерактивные задачи. Существует большое количество "наборов инструментов" с хорошим кодом для конкретных задач, которые являются доступными. Существует большое сообщество пользователей, которые разделяют числовые коды (Python+включает в себя ничего не в той же лиге, по крайней мере пока)

Python, бородавки и все, является гораздо лучшим языком программирования (как и многие другие). Однако, это десятилетие отстают в плане инструментов.

ключевым моментом является то, что большинство людей, которые используют MATLAB, на самом деле не программисты и не хотят быть.

это паршивый выбор для общего языка программирования; это изворотливый, медленный для многих задач (вам нужно векторизовать вещи, чтобы получить эффективные коды), и нелегко интегрировать с внешним миром. С другой стороны, для дела это хорошо, очень хорошо. Очень немногие вещи сравнивают. Есть компания с разумной поддержкой, и кто знает, сколько человеко-лет вложено в нее. Это может иметь значение в промышленности.

строго глядя на сравнение Python и MATLAB, они в основном разные инструменты для разных заданий. В областях, где они немного перекрываются, трудно сказать, какой лучший маршрут (во многом зависит от того, что вы пытаетесь сделать). Но в основном Python не так хорош в основных сильных сторонах MATLAB, и наоборот.


большинство ответов не получают точку.

есть одна причина, по которой matlab так хорош и так широко используется:

ЧРЕЗВЫЧАЙНО БЫСТРОЕ КОДИРОВАНИЕ

я phD-студент компьютерного зрения и использую matlab в течение 4 лет, до моей phD я использовал разные языки, включая C++, java, php, python... Большинство исследователей компьютерного зрения используют исключительно matlab.

1) исследователи нуждаются в быстром прототипировании

In исследовательская среда, у нас есть (надеюсь) часто новые идеи, и мы хотим проверить их очень быстро, чтобы увидеть, стоит ли продолжать в этом направлении. И чаще всего только крошечная часть того, что мы кодируем, будет полезна.

Matlab часто медленнее во время выполнения, но нам все равно. Поскольку мы не знаем заранее, какой метод будет успешным, мы должны попробовать много вещей, поэтому наша шея бутылки программирует время, потому что наш код будет чаще всего запускают несколько раз, чтобы получить результаты для публикации, и это все.

Итак, давайте посмотрим, как MATLAB может помочь.

2) Все, что мне нужно уже есть

Matlab имеет действительно много функций, которые мне нужны, так что мне не нужно изобретать их все время:

измените индекс матрицы на 2d координату:ind2sub извлеките все патчи изображения:im2col; вычислить гистограмму изображения: hist(Im(:)); найти уникальные элементы в список unique(list); добавьте вектор ко всем векторам матрицы bsxfun(@plus,M,V); свертка на n-мерных массивах convn(A); вычислить время вычисления вложенной части кода:tic; %%code; toc; графический интерфейс для обрезки изображения:imcrop(im);

список может быть очень длинным... И их очень легко найти с помощью.

ближе всего к этому python...Но это просто боль в python, я должен идти в google каждый раз, чтобы искать имя функции, которая мне нужна, а затем я нужно добавить пакеты, а пакеты не совместимы друг с другом, формат матрицы меняется, функция свертки только обрабатывает двойные, но не делает ошибку, когда я даю ей char, просто дайте неправильный вывод... нет!--14-->

3) IDE

пример: я запускаю скрипт. Это приводит к ошибке из-за матрицы. я все еще могу выполнить код с помощью командной строки. я представляю, как он делает:imagesc(matrix). Я вижу, что последняя строка матрицы странная. Я исправляю ошибку. все переменные по-прежнему. Я выбираю оставшуюся часть кода, нажимаю F9 для выполнения выбора, и все продолжается. отладка становится быстрой, спасибо, что.

Matlab подчеркивает некоторые из моих ошибок Перед выполнением. Так что я быстро вижу проблемы. Он предлагает какой-то способ сделать мой код быстрее.

есть удивительный профайлер включено в IDE. KCahcegrind-такая боль для использования по сравнению за это.

Иды python полны. python без ipython не используется. Мне никогда не удается отлаживать, используя 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) документация

все очень быстро получить доступ, все кристально ясно, имена функций хорошо подобраны. С python мне всегда нужно google вещи, смотреть на форумах или stackoverflow.... полное время кабан.

PS: наконец, то, что я ненавижу с matlab: его цена


Я использую matlab в течение многих лет в своих исследованиях. Он отлично подходит для линейной алгебры и имеет большой набор хорошо написанных наборов инструментов. Самые последние версии начинают подталкивать его ближе к языку общего назначения (Лучшие оптимизаторы, гораздо лучшая объектная модель, более богатые правила области видимости и т. д.).

прошлым летом у меня была работа, где я использовал Python + numpy вместо Matlab. Я наслаждался сменой темпа. Это "настоящий" язык (и все, что влечет за собой), и это имеет некоторые большие числовые функции, такие как широковещательные массивы. Мне также очень нравится среда ipython.

вот некоторые вещи, которые я предпочитаю о Matlab:

  • последовательность: MathWorks потратил много усилий, чтобы ящики инструментов выглядели и работали как друг с другом. Они не сделали идеальную работу, но это один из лучших, которые я видел для кодовой базы, которой десятилетия.
  • документы: Я считаю, что это очень расстраивает выясните некоторые вещи в numpy и / или python, потому что качество документации пятнистое: некоторые вещи документированы очень хорошо, некоторые-нет. Это часто больше всего расстраивает, когда я вижу вещи, которые кажутся имитирующими Matlab, но не совсем работа такая же. Возможность захватить источник бесценна (честно говоря, большинство наборов инструментов Matlab также поставляются с источником)
  • компактность: для того, что я делаю, синтаксис Matlab часто более компактен (но не всегда)
  • обороты: у меня слишком много кода Matlab, чтобы изменить сейчас

Если бы у меня не было такой большой существующей кодовой базы, я бы серьезно рассмотрел переход на Python + numpy.


держать все. Когда в последний раз вы программировали свой калькулятор для игры в тетрис? Вы действительно думали, что можете написать все, что хотите, в этих 128k ОЗУ? Скорее всего, нет. MATLAB не предназначен для программирования, если вы не имеете дело с огромными матрицами. Это графический калькулятор, который вы вытаскиваете, когда у вас есть мегабайты до гигабайт данных для хруста и/или построения. Изучите только основные вещи, но также не убивайте себя, пытаясь сделать Python графическим калькулятором.

вы быстро почувствовать, когда вы хотите хруст, сюжет или исследовать в MATLAB и когда вы хотите иметь все, что предлагает Python. Многие инженеры обращаются к предварительной и последующей обработке в Python или Perl. Иногда даже просто вызывая MATLAB для жестких бит.

Это такие совершенно разные инструменты, что вы должны сначала изучить их основные сильные стороны, не пытаясь заменить один на другой. Предоставленный для экономии денег, я бы использовал Octave или skimp на легкости и научился работать с разреженные матрицы в Perl или Python.


MATLAB отлично подходит для работы с массивами, выполнения специализированных математических функций и быстрого создания хороших графиков.

Я бы, вероятно, использовал его только для больших программ, если бы мог использовать много манипуляций с массивом/матрицей.

вам не нужно беспокоиться об IDE столько, сколько в более формальных пакетах, поэтому студентам без большого опыта программирования легче подобрать.


MATLAB популярная и широко приспособленная часть сложный программный пакет. Было бы ошибкой думать это просто математическое программное обеспечение, так как оно имеет широкий спектр "инструментальный ящик." Я недавно использовал библиотек matplotlib для построения некоторых данных из базы данных, и он сделал работу, не нуждаясь во всех колокола и свистки MATLAB. Однако это может быть неправильно чтобы сравнить Python и MATLAB в каждой ситуации. Как с все остальное решение зависит от того, что вам нужно делать.

Я использовал MATLAB в undergrad для проектирования систем управления и моделирование, а также для обработки изображений в аспирантуре. Для эти поля MATLAB имеют наибольший смысл из-за мощные toolboxes управления и обработки изображений. Как все упомянутые операции массива, которые используются в каждом MATLAB скрипт придется писать, очень легко с MATLAB.

еще одна хорошая вещь о MATLAB заключается в том, что это очень легко и быстро делать прототипы и идеи, используя построенное в функции элементов. Например, не требуется никаких усилий, чтобы импортируйте изображение и вычислите его гистограмму или сделайте несколько простых обработка на нем. Одним из недостатков MATLAB может быть скорость из-за ее интерпретируемой природы. Однако, если один очень нужна скорость, чем он может выбрать для реализации проверенная логика в C / C++ и т. д.

для дальнейшего сравнения с Python, я могу сказать, что MATLAB обеспечивает полный пакет для вас для того чтобы сделать вашу работу без нужно искать внешние библиотеки и реализация дополнительных функций.

последний момент о MATLAB, который я вижу, не упоминается в ответы здесь в том, что он имеет очень мощный визуальный моделирование / среда моделирования называется Simulink. Это легче проектировать и моделировать большие системы С помощью Simulink.

наконец, опять же, все зависит от проблемы, которую вам нужно решать. Если ваш проблемный домен может использовать один из Наборы инструментов MATLAB, и у вас есть доступ к MATLAB, тогда вы мочь убедитесь, что у вас будет правильный инструмент для его решения.


MATLAB, как упоминалось другими, отлично справляется с матричными манипуляциями и изначально был построен как расширение известного Блас и LAPACK библиотеки, используемые для линейной алгебры. Он хорошо взаимодействует с другими языками, такими как Java, и хорошо пользуется инженерными и научными компаниями для своих хорошо развитых и документированных библиотек. Из того, что я знаю о Python и NumPy, хотя они разделяют многие фундаментальные возможности MATLAB, у них нет полная широта и глубина возможностей со своими библиотеками.

лично я использую MATLAB, потому что это то, что я узнал в своей стажировке, это то, что я использовал в аспирантуре, и это то, что я использовал в своей первой работе. Я ничего не имею против Python (или любой другой язык). Я тоже к этому привыкла.

кроме того, есть еще одна бесплатная версия в дополнение к scilab упомянутой @Джим С из gnu называется Октавы.


лично я склонен думать о Matlab как об интерактивном матричном калькуляторе и инструменте построения графиков с несколькими возможностями сценариев, а не как о полноценном языке программирования, таком как Python или C. Причина его успеха заключается в том, что матричный материал и построение графиков работают из коробки, и вы можете сделать несколько очень конкретных вещей в нем практически без реальных знаний программирования. Язык, как вы указываете, чрезвычайно неприятен для использования для более общих задач, таких как даже простейшая обработка строк. Его синтаксис причудлив, и он не был создан с абстракциями, необходимыми для проектов более 100 строк или около того.

Я думаю, что причина, по которой люди пытаются использовать Matlab как серьезный язык программирования, заключается в том, что большинство инженеров (есть исключения; моя степень в биомедицинской инженерии, и мне нравится программирование) ужасные программисты и ненавидят программировать. Они учат Matlab в колледже в основном для matrix math, и они узнают некоторые рудиментарное программирование как часть обучения Matlab, и просто предположим, что Matlab достаточно хорош. Я не могу вспомнить никого, кто знает какой-либо язык, кроме Matlab, но все еще использует Matlab для чего-либо, кроме нескольких приложений с чистым числом.


наиболее вероятная причина, по которой он так часто используется в университетах, заключается в том, что математический факультет привык к нему, понимает его и знает, как включить его в свою учебную программу.


между matplotlib+pylab и включает в себя Я не думаю, что есть большая разница между Matlab и python, кроме культурной инерции, как предложил @Adam Bellaire.


Я считаю, что у вас есть очень хороший момент, и это тот, который был поднят в компании, где я работаю. Компания ограничена в своей способности применять matlab из-за связанных с этим затрат на лицензирование. Один разработчик доказал, что Python был очень подходящей заменой, но он упал на невежественные уши, потому что для владельцев этих ушей...

  1. никто в компании не знал Python, хотя многие из нас хотели его использовать.
  2. MatLab имеет название, компанию и целевую группу за ним решать любые проблемы.
  3. были некоторые (но не много) устаревших проектов MatLab, которые необходимо будет переписать.

Если это стоит £ 10,000 (?? оно того стоит!!

Я с тобой здесь. Python-очень хорошая замена для MatLab.

я должен отметить, что мне сказали, что компания использует, возможно, от 5% до 10% возможностей MatLabs, и это является основой для моего соглашения с оригиналом плакат


MATLAB-фантастический инструмент для

  • прототипирование
  • инженерное моделирование и
  • быстрая визуализация данных

вы действительно можете играть с, визуализировать и проверить свои идеи на наборе данных очень эффективно. Его не следует рассматривать в качестве альтернативы другим языкам программного обеспечения, используемым для разработки продукта. Я настоятельно рекомендую его для вышеуказанных задач, хотя это дорогостоящие бесплатные альтернативы, такие как Октавы и питон догоняет.


кажется чистой инерцией. Там, где он используется, все слишком заняты, чтобы изучать IDL или numpy достаточно подробно, чтобы переключаться, и не хотят переписывать хорошие рабочие программы. К счастью, это не совсем так, но достаточно верно в достаточных местах, что Matlab будет вокруг долгое время. Как Fortran (в активном использовании, где я работаю!)


основной причиной полезности в промышленности являются Плагины, построенные поверх основной функциональности. Почти все активные разработки Matlab за последние несколько лет были сосредоточены на них.

к сожалению, у вас не будет большой возможности использовать их в академической среде.


Я знаю, этот вопрос старый, и поэтому больше не может быть наблюдал, но чувствовал, что надо что-то сказать. Как аэрокосмический инженер в Georgia Tech, я могу сказать, без qualms, что MATLAB является удивительным. Вы можете получить его быстро интерфейс с электронными таблицами Excel для получения данных о как высоко и быстро летят ракеты, как влияет ветер те же самые ракеты, и как разные двигатели имеют значение. За ракетная техника, подобные концепции вступают в игру для автомобилей, грузовиков, летательные аппараты, космические аппараты, и даже легкая атлетика. Вы можете тянуть в большие объемы данных, манипулируйте всем этим и убедитесь, что ваши результаты таковы, какими они должны быть. В случае, если что-то вы можете добавить разрыв строки, где произошла ошибка для отладки ваша программа без перекомпиляции каждый раз, когда вы хотите чтобы запустить программу. Это медленнее, чем некоторые другие программы? Ну, технически. Я уверен, если вы хотите сделать номер хруст это отлично подходит для графического процессора NVIDIA, это вероятно, было бы быстрее, но это требует намного больше усилий с более жесткой отладкой.

как общий язык программирования, MATLAB слаб. Это не предназначен для работы с Python, Java, ActionScript, C / C++ или любой другой язык общего назначения. Это предназначено для ... инженерии и математики нишу названия, и это делает это фантастически.


MATLAB был оболочкой вокруг общедоступных библиотек. И во многих случаях так оно и есть. Когда вы доберетесь до больших наборы данных, он имеет много дополнительных оптимизаций, включая изучение и специальные обсадные общие проблемы (сокращение до разреженные матрицы, где это полезно, например) и обработка крайние случаи. Часто вы можете представить проблему в стандарте сформируйте к общей функции, и она определит самое лучшее базовый алгоритм для использования на основе ваших данных. Для малых N, все алгоритмы быстро, но MATLAB делает определение оптимальный алгоритм не проблема.

Это написано кем-то, кто ненавидит MATLAB, и попытался заменить его из-за проблем интеграции. От вашего вопрос, вы упоминаете о получении MATLAB 5 и использовании его для курс. На этом уровне, вы, возможно, захотите взглянуть на Октавы, реализация с открытым исходным кодом с тем же синтаксис. Я предполагаю, что сейчас это до уровней MATLAB 5 (I только поиграйте с ним). Это должно позволить вам " пройти ваш экзамен." Для голой функциональности MATLAB, похоже, закрывать. Он отсутствует в поддержке toolbox (которая, опять же, в основном служит для изменения функции к формам знаком с инженерами в этой области и выбирает право базовый алгоритм для использования).


одна из причин популярности MATLAB в университетах-та же причина, по которой многие вещи популярны в университетах: есть много профессоров, знакомых с ним, и он довольно надежный.

Я говорил со многими людьми, которые особенно заинтересованы в зарождающейся способности MATLAB подключаться к GPU вместо работы последовательно. Используя Python в аспирантуре, я бы хотел, чтобы у меня были лики для работы с MATLAB в этом случае. Это наверняка сделает вычисления векторного пространства a бриз.


прошло некоторое время с тех пор, как я использовал Matlab, но из памяти он предоставляет (хотя и с дополнительными плагинами) возможность генерировать источник, чтобы позволить вам реализовать свой алгоритм на DSP.

поскольку python является языком программирования общего назначения, нет причин, по которым вы не могли бы сделать все в python, что вы можете сделать в matlab. Однако matlab предоставляет ряд других инструментов, например. очень широкий массив функций dsp, широкий массив доменов S и Z особенности.

все это может быть закодировано вручную на python (так как это язык общего назначения), но если все, что вам нужно, - это результаты, возможно, тратить деньги на Matlab-более дешевый вариант?

эти функции также были настроены на производительности. например. Документация для Numpy указывает, что их преобразование Фурье оптимизировано для мощности 2 точечных наборов данных. Как я понимаю, Matlab был написан для использования наиболее эффективного преобразования Фурье в соответствии с размером из набора данных, а не только мощность 2.

edit: О, и в Matlab вы можете произвести некоторые сенсационные просмотр графики очень легко, что важно, когда вы представляете свои данные. Опять же, конечно, не невозможно использовать другие инструменты.


Я думаю, вы ответили на свой вопрос, Когда отметили, что Matlab "круто работать с матрицами и строить планы". Любое приложение, которое требует много матричной математики и визуализации, вероятно, будет проще всего сделать в Matlab.

тем не менее, синтаксис Matlab чувствует себя неудобно и показывает возраст языка. Напротив, Python-гораздо более приятный язык программирования общего назначения и с правильными библиотеками может делать многое из того, что делает Matlab. Однако, MATLAB, которые всегда будут иметь более сжатый синтаксис, чем Python для векторных и матричных манипуляций.

Если большая часть вашего программирования включает в себя такие манипуляции, как обработка сигналов и некоторые статистические методы, то Matlab будет лучшим выбором.


Преимущество Первого Хода. Matlab существует с конца 1970-х годов. Python появился совсем недавно, и библиотеки, которые делают его подходящим для задач типа Matlab, появились еще недавно. Люди привыкли к MATLAB, поэтому они используют его.


Matlab хорошо делает хруст числа. Также матричные и матричные манипуляции. Он имеет много полезных встроенных библиотек (зависит от версии), я думаю, что его проще использовать, чем python, если вы собираетесь вычислять уравнения.