Подтвердить что ты не робот

Является ли MATLAB быстрее, чем Python?

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

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

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

4b9b3361

Ответ 1

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

http://wiki.scipy.org/PerformancePython

Из введения

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

Он также сравнивает MATLAB и, похоже, показывает схожие скорости при использовании Python и NumPy.

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

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

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

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

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

EDIT:

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

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

Если, однако, вы решите пойти с С++, вы можете использовать TNT (Template Numerical Toolkit, С++-реализацию Lapack).

Удачи.

Ответ 5

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

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

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

Ответ 7

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

Ответ 8

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

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