MATLAB быстрее, чем Python? - PullRequest
       44

MATLAB быстрее, чем Python?

36 голосов
/ 25 января 2010

Я хочу вычислить магнитные поля некоторых проводников, используя закон Био – Савара , и я хочу использовать матрицу 1000x1000x1000. Раньше я использовал MATLAB, но теперь я хочу использовать Python. Является ли Python медленнее, чем MATLAB? Как я могу сделать Python быстрее?

EDIT: Возможно, лучший способ - это вычислить большой массив с помощью C / C ++, а затем перенести их в Python. Я хочу визуализировать с помощью VPython .

EDIT2: Что лучше в моем случае: C или C ++?

Ответы [ 8 ]

27 голосов
/ 25 января 2010

Вы можете найти некоторые полезные результаты в нижней части этой ссылки

http://wiki.scipy.org/PerformancePython

Из введения,

Сравнение переплетения с NumPy, Pyrex, Psyco, Fortran (77 и 90) и C ++ для решения уравнения Лапласа.

Он также сравнивает MATLAB и, по-видимому, показывает аналогичные скорости при использовании Python и NumPy .

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

Вы также можете скомпилировать NumPy с помощью оптимизированных библиотек, таких как ATLAS , которые предоставляют некоторые BLAS / LAPACK . Они должны быть сопоставимы по скорости с MATLAB.

Я не уверен, что загрузка NumPy уже построена на нем, но я думаю, ATLAS настроит библиотеки для вашей системы, если вы скомпилируете NumPy,

http://www.scipy.org/Installing_SciPy/Windows

Ссылка содержит более подробную информацию о том, что требуется для платформы Windows.

EDIT:

Если вы хотите узнать, что работает лучше, C или C ++, возможно, стоит задать новый вопрос. Хотя по ссылке выше C ++ имеет лучшую производительность. Другие решения также довольно близки, то есть Pyrex, Python / Fortran (с использованием f2py) и встроенный C ++.

Единственная матричная алгебра в C ++, которую я когда-либо делал, - это использование MTL и реализация расширенного фильтра Калмана. Я думаю, хотя, по сути, это зависит от библиотек, которые вы используете LAPACK / BLAS, и от того, насколько хорошо они оптимизированы.

Эта ссылка содержит список объектно-ориентированных числовых пакетов для многих языков.

http://www.oonumerics.org/oon/

19 голосов
/ 25 января 2010

NumPy и MATLAB используют базовую реализацию BLAS для стандартных операций линейной алгебры. Некоторое время оба использовали ATLAS , но в настоящее время MATLAB, очевидно, также поставляется с другими реализациями, такими как Math Kernel Library (MKL) от Intel. Какой из них быстрее, насколько зависит от системы и от того, как была скомпилирована реализация BLAS. Вы также можете скомпилировать NumPy с помощью MKL, и Enthought работает над поддержкой MKL для их дистрибутива Python (см. Их roadmap ). Вот также недавнее интересное сообщение в блоге об этом.

С другой стороны, если вам нужны более специализированные операции или структуры данных, то и Python, и MATLAB предлагают вам различные способы оптимизации (например, Cython , PyCUDA , ...) .

Редактировать: я исправил этот ответ, чтобы учесть различные реализации BLAS. Я надеюсь, что теперь это справедливое представление о текущей ситуации.

7 голосов
/ 25 января 2010

Единственный действительный тест - это тестирование. Это действительно зависит от вашей платформы и от того, насколько хорошо закон Био-Савара соответствует встроенным операциям Matlab или NumPy / SciPy.

Что касается ускорения Python, Google работает над Unladen Swallow, JIT-компилятором для Python. Возможно, есть и другие подобные проекты.

4 голосов
/ 26 января 2010

Что касается вашего редактирования 2, я настоятельно рекомендую вам использовать Fortran, потому что вы можете использовать доступные подпрограммы линейной алгебры (Lapack и Blas), и это намного проще, чем C / C ++ для матричных вычислений.

Если вы предпочитаете использовать подход C / C ++, я бы использовал C, потому что вам, по-видимому, нужна необработанная производительность на предположительно простом интерфейсе (матричные вычисления обычно имеют простые интерфейсы и сложные алгоритмы).

Если, однако, вы решили использовать C ++, вы можете использовать TNT (Template Numeric Toolkit, реализация Lapack на C ++).

Удачи.

3 голосов
/ 25 января 2010

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

Чтобы сделать это быстрее, есть несколько вещей, которые вы можете сделать. Существует инструмент под названием Cython , который позволяет добавлять объявления типов в код Python и переводить их в модуль расширения Python на языке C. Насколько это полезно для вас, зависит от того, насколько вы усердны в своем типе. декларации - если вы вообще ничего не добавите, вы не увидите особой пользы. Cython также поддерживает типы NumPy, хотя они немного сложнее, чем другие типы.

Если у вас хорошая видеокарта и вы хотите немного узнать о вычислениях на GPU, PyCUDA также может помочь. (Если у вас нет видеокарты nvidia, я слышал, что в работе также есть PyOpenCL). Я не знаю вашу проблемную область, но если она может быть сопоставлена ​​с проблемой CUDA, тогда она должна уметь хорошо обрабатывать ваши 10 ^ 9 элементов.

2 голосов
/ 16 марта 2010

А вот обновленное «сравнение» между MATLAB и NumPy / MKL на основе некоторых функций линейной алгебры:

http://dpinte.wordpress.com/2010/03/16/numpymkl-vs-matlab-performance/

Точечный продукт не такой медленный; -)

0 голосов
/ 23 августа 2016

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

Короче говоря, функция FFT в MATLAB лучше, чем Python, но вы можете сделать несколько простых манипуляций, чтобы получить сопоставимые результаты и скорость. Я также обнаружил, что импорт данных в Python был быстрее по сравнению с MATLAB (даже для файлов MAT, использующих scipy.io).

0 голосов
/ 13 марта 2010

Я также хотел бы отметить, что Python (+ NumPy) может легко взаимодействовать с Фортраном через модуль F2Py, который в основном обеспечивает вашу собственную скорость Фортрана для фрагментов кода, которые вы загружаете в него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...