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