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


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

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

написание функции или разбор файла просто болезненно. Я все еще в начале, чего мне не хватает?

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


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

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

21 53

21 ответ:

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

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

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

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

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

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

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

большинство ответов не имеют смысла.

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

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

я аспирант по компьютерному зрению и использую 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 каждый раз, чтобы найти имя функции, которая мне нужна, а затем я нужно добавить пакеты, и пакеты не совместимы друг с другом, формат матрицы меняется, функция свертки только обрабатывает удвоения, но не делает ошибку, когда я даю ей символ, просто даю неправильный вывод... нет

3) IDE

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

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

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

Иды python являются awefull. 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 stuff, смотреть на форумах или stackoverflow.... полное время кабан.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Я думаю, что причина, по которой люди пытаются использовать Matlab в качестве серьезного языка программирования, заключается в том, что большинство инженеров (есть исключения; моя степень в области биомедицинской инженерии, и мне нравится программирование) являются ужасными программистами и ненавидят программировать. Они преподают Matlab в колледже в основном для матричной математики, и они учатся некоторым рудиментарные программирования в рамках обучения в среде 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, я могу сказать, без угрызения совести, что MATLAB является удивительным. Вы можете иметь его быстро интерфейс с таблицы Excel для извлечения данных о как высоко и быстро летят ракеты, как влияет ветер те же самые ракеты, и как разные двигатели имеют значение. За ракетная техника, подобные концепции вступают в игру для легковых автомобилей, грузовиков, летательный аппарат, космический аппарат, и даже легкая атлетика. Вы можете подъехать большие объемы данных, манипулировать всем этим, и убедитесь, что ваши результаты таковы, какими они должны быть. В случае чего-то вы можете добавить разрыв строки, где произошла ошибка для отладки ваша программа без перекомпиляции каждый раз, когда вы хотите чтобы запустить вашу программу. Это медленнее, чем некоторые другие программы? Ну, технически. Я уверен, если вы хотите сделать номер хруст это отлично подходит для графического процессора NVIDIA, это вероятно, будет быстрее, но это требует намного больше усилий с более жесткой отладкой.

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

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

Это написано кем-то, кто ненавидит MATLAB, и пробовал заменить его из-за проблем интеграции. От вашего вопрос, вы упоминаете получение MATLAB 5 и использование его для a курс. На этом уровне, вы, возможно, захотите взглянуть на Октавы, реализация с открытым исходным кодом с тем же синтаксис. Я предполагаю, что это до уровня MATLAB 5 к настоящему времени (I только поиграйте с ним). Это должно позволить вам " пройти ваш экзамен." За голую функциональность Матлаба вроде бы закрывать. Ему не хватает поддержки 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, поэтому они его используют.

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