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

Я хочу вычислить магнитные поля некоторых проводников с помощью закона Biot–Savart, и я хочу использовать 1000x1000x1000 матрица. Прежде чем я буду использовать MATLAB, но теперь я хочу использовать Python. Python медленнее, чем MATLAB? Как я могу сделать Python быстрее?

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

EDIT2: Который лучше в моем случае: C или C++?

36
задан Peter Mortensen 3 February 2011 в 18:02
поделиться

7 ответов

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

http://wiki.scipy.org/performancepyphon

из введения,

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

Это также сравнивает MATLAB и, похоже, показывает аналогичные скорости при использовании Python и Numpy .

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

Вы также можете компилировать Numpy с оптимизированными библиотеками, такими как ATLAS , который обеспечивает некоторые BLAS / лапака . Они должны быть сопоставимыми скоростью к Matlab.

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

http://www.scipy.org/installing_scipy/windows

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

Редактировать:

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

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

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

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

27
ответ дан 27 November 2019 в 05:54
поделиться

Единственный допустимый тест - это позоре. Это действительно зависит от того, на что такое ваша платформа, и насколько хорошо катаются закона Biot-Savart на встроенные операции MATLAB или Numpy / Scipy.

Что касается быстрее Python, Google работает над NUSHALDEN NULLALL, Compiler JIT для Python. Есть, вероятно, другие проекты, как это также.

7
ответ дан 27 November 2019 в 05:54
поделиться

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

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

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

Удачи.

4
ответ дан 27 November 2019 в 05:54
поделиться

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

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

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

3
ответ дан 27 November 2019 в 05:54
поделиться

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

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

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

19
ответ дан 27 November 2019 в 05:54
поделиться

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

0
ответ дан 27 November 2019 в 05:54
поделиться

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

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

Точечное произведение не так уж и медленно ; -)

2
ответ дан 27 November 2019 в 05:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: