2012-02-08 14 views
14

Obecnie prototypuję niektóre algorytmy w Matlab, które polegają na macierzowej, DSP, statystyce i funkcji analizy obrazu.Jakiej biblioteki numerycznej użyć do przenoszenia z Matlab do C++?

Niektóre przykłady tego, co może muszę:

  • wektory własne
  • splot w 2D i 3D
  • FFT
  • Krótki czas Fourier Transform
  • transformacji Hilberta
  • Wielomiany Czebyszewa
  • filtr dolnoprzepustowy
  • losowe wielowymiarowe numery Gaussa
  • kmeans

Później będę potrzebował do realizacji tych algorytmów w C++.

Mam również licencję na numeryczne przepisy w C++, które lubię, ponieważ są dobrze udokumentowane i mają szeroki zakres algorytmów. Znalazłem również klasę, która pomaga w zawijaniu funkcji NR w MEX: nr3matlab.h. Używając tej klasy, powinienem móc generować wrappery, które pozwalają mi wywoływać funkcje NR z Matlaba. Jest to dla mnie bardzo ważne, dzięki czemu mogę sprawdzić każdy krok podczas przenoszenia z Matlab do C++. Jednak Numerical Recipes in C++ są pewne istotne wady:

  • algorytmy realizowane w sposób prosty i niekoniecznie bardzo wydajne manner
  • nie gwintowane

Ja dlatego rozważa wykorzystanie innej biblioteki numerycznej. Idealna biblioteka powinny:

  • być szeroki zakres i funkcjonalności, jak to możliwe
  • dobrze udokumentowane
  • (nie ma wsparcia handlowa)
  • zostały już Matlab owijarki
  • bardzo wytrzymałe
  • bardzo wydajny
  • gwintowany
  • (mają realizację GPU, które można obrócić na zamiast CPU z „przełącznik”)

Które biblioteki numeryczne (biblioteki) proponujesz?

Z góry dziękuję za wszelkie odpowiedzi!

+2

Lista konkretnych funkcji/algorytmów, których szukasz, teraz jest to zbyt mało precyzyjne. –

+0

Dzięki. Wymienione niektóre, które powstały na myśl. – Andy

+0

Pomyślałem, że wspomnę o tym, aby w przyszłości takie pytania znaleźć dobry dom na [scicomp.SE]. –

Odpowiedz

3

Właściwie powinieneś rzucić okiem na openCV.

Chociaż jego pierwszym celem jest przetwarzanie obrazu i obrazu, biblioteka ta ma wiele narzędzi do algebry liniowej (prawie wszystko, o co prosisz). Na początku ta biblioteka została zaimplementowana przez firmę Intel, z dużym naciskiem na wydajność. Obsługuje wiele wątków, IPP, ... Składnia jest raczej łatwiejsza w użyciu niż zwykła biblioteka C++.

Powinieneś rzucić okiem na to cheat sheet. Składnia została zmieniona od wersji 2.0 na mimikę matlab. Ta biblioteka jest szeroko stosowana i bardzo aktywna (ostatnia duża aktualizacja, sierpień 2011).

+0

Jestem zaskoczony, że zasugerowałeś OpenCV zamiast Eigen. – CroCo

3

NAG może być jedną dobrą opcją. Mnóstwo instytucji finansowych używa go w swoich bibliotekach matematycznych. Nie mam jednak implementacji GPU, kiedy ostatnio go używałem.

+0

Dzięki. Wygląda bardzo dobrze. Czy wiesz, ile kosztuje 1 licencja programisty? – Andy

+0

@ Andreas Werner Paulsen - Google to odkrył. http://www.eduserv.org.uk/lns/agreements/nag/nag-pricing. Nie wiesz, jak bardzo ci to pomaga. Instytucje edukacyjne otrzymują preferencyjne ceny, wydaje się na ich stronie internetowej. – DumbCoder

4

Masz dość długą listę wymagań i może być wyzwaniem, aby pokryć je wszystkie jedną biblioteką.

Dla ogólnych przejść Matlab-do-C++ mogę bardzo polecić Armadillo, która jest szablonową biblioteką C++ z akcentem na algebrę liniową i skupia się na ułatwieniu pisania podobnie do Matlaba. Jest to bardzo dobry wynik, jest bardzo dobrze udokumentowany i aktywnie utrzymywany. Możesz zacząć tam i spróbować wypełnić brakujące elementy do swojego zadania.

+0

Dzięki. Również wygląda bardzo dobrze. Szczególnie podoba mi się to, że jest on zbudowany na Lapack, podczas gdy okazuje się znacznie łatwiejszy i podobny do Matlab interfejs. – Andy

+0

Na szczycie BLAS, który jest interfejsem. Więc zawsze możesz dodać szybszy BLAS zamiast domyślnego LAPACK. Conrad zna się na rzeczy i z przyjemnością z nim pracuje. –

2

jest również biblioteka Eigen: http://eigen.tuxfamily.org , ale jest najczęściej używana jako część większego szkieletu. Oferuje on podstawową (i nieco bardziej złożoną) algebrę:

+0

To jest objazd siłą C++ szablonów, ale kompilacje są powolne, a komunikaty o błędach mogą być strasznie długie (straszne * i * długie). – denis

Powiązane problemy