Какую числовую библиотеку использовать для переноса из Matlab в С++?
Я в настоящее время прототипирую некоторые алгоритмы в Matlab, которые полагаются на функциональность матрицы, DSP, статистики и анализа изображений.
Некоторые примеры того, что мне может понадобиться:
- собственные векторы
- свертка в 2D и 3D
- FFT
- Короткое преобразование Фурье
- Преобразование Гильберта
- Многочлены Чебышева
- фильтр нижних частот
- случайные многомерные гауссовские числа
- kmeans
Позже мне нужно будет реализовать эти алгоритмы в С++.
У меня также есть лицензия на Numericical Recipes в С++, которая мне нравится, потому что она хорошо документирована и имеет широкий спектр алгоритмов.
Я также нашел класс, который помогает обернуть функции NR в MEX: nr3matlab.h.
Поэтому, используя этот класс, я должен иметь возможность создавать обертки, которые позволяют мне называть функции NR из Matlab. Это очень важно для меня, так что я могу проверять каждый шаг при переносе из Matlab в С++.
Однако числовые рецепты в С++ имеют некоторые важные недостатки:
-
Алгоритмы
- реализованы в простой, а не очень эффективной
способ
- not threaded
Поэтому я рассматриваю возможность использования другой числовой библиотеки.
Идеальная библиотека должна:
- быть максимально широким по объему и функциональности
- хорошо документирован
- (есть коммерческая поддержка)
- уже сделали обертки Matlab
- очень надежный
- очень эффективный
- threaded
- (есть возможность выполнения GPU, которая может быть повернута
вместо CPU с "переключателем" )
Какую числовую библиотеку (библиотеки) вы бы предложили?
Заранее благодарим за любые ответы!
Ответы
Ответ 1
На самом деле вы должны взглянуть на openCV.
Хотя его первой целью является компьютерное зрение/обработка изображений, в этой библиотеке много инструментов линейной алгебры (почти все, что вы просите). Сначала эта библиотека была реализована Intel, с большим вниманием к производительности. Он может обрабатывать несколько потоков, IPP,...
Синтаксис довольно прост в использовании, чем обычная библиотека С++.
Вы должны посмотреть на этот чит-лист. Синтаксис был изменен с версии 2.0, чтобы имитировать Matlab.
Эта библиотека широко используется и хорошо активна (последнее большое обновление, август 2011 г.).
Ответ 2
У вас есть довольно длинный список требований, и может быть сложно охватить их всех одной библиотекой.
Для общих переходов Matlab-to-С++ я могу настоятельно рекомендовать Armadillo, который является шаблонной библиотекой С++ с основное внимание уделяется линейной алгебре --- и уделяется особое внимание упрощению написания выражения Matlab. Это очень хорошая производительность, очень хорошо документирована и активно поддерживается. Вы можете начать там и попытаться заполнить недостающие части для своей задачи.
Ответ 3
NAG может быть одним из хороших вариантов. Нагрузки финансовых учреждений используют его в своих математических библиотеках. Однако у меня нет реализации GPU, когда я в последний раз ее использовал.
Ответ 4
существует также библиотека Eigen: http://eigen.tuxfamily.org
но он в основном используется как часть более крупной структуры. Он предлагает базовую (и немного более сложную) алгебру