2009-12-07 21 views
8

Quelle bibliothèque utilisez-vous pour les tableaux de dimension N? J'utilise blitz ++ au travail et je n'aime vraiment pas certains aspects de celui-ci. Certains aspects sont même dangereux. La nécessité de redimensionner avant en utilisant l'opérateur =. A (Range :: all(), Range :: all()) lance une matrice (0,0) , etc. et les opérations d'algèbre linéaire doivent être effectuées via clapack.Bibliothèque C++ pour les tableaux, les matrices, les vecteurs et les opérations classiques d'algèbre linéaire

J'ai utilisé et aimé eigen. Je vous remercie de ses « tout-en-tête » implémentations, le sucre syntaxique C de, et la présence de toutes les opérations d'algèbre linéaire j'ai besoin (de multiplication de la matrice, la résolution du système, Cholesky ...)

Qu'est-ce que vous utilisez ?

+0

J'ai l'impression que vous me demandez ce que les bibliothèques utilisent pour les tableaux mathématiques, pas pour les «tableaux C++»? Si oui, vous devriez envisager d'être plus précis dans votre question :) – larsmoa

+0

Pourquoi voudriez-vous des "opérations matricielles de base" pour les tableaux? Peut-être que votre question devrait porter sur les classes * matrix * alors. – jalf

+0

Quel est le problème avec quelque chose comme clapack? (ou pourquoi est-ce trop «contondant»?) Ce n'est pas vraiment clair ce que vous cherchez. – jalf

Répondre

7

et boost::MultiArray. Il y a aussi un très bon paquet d'algèbre linéaire en boost appelé uBLAS

+2

ou std :: array, si vous utilisez gcc avec -std = C++ 0x – coelhudo

+0

les multiarrays de boost sont sloooow, voir http://stackoverflow.com/questions/446866/boostmultiarray-performance-question – denis

3

Il y a aussi armadillo que j'utilise dans certains projets. De leur site web:

Armadillo est une bibliothèque d'algèbre linéaire en C++ (matrice mathématique) visant à un bon équilibre entre la vitesse et la facilité d'utilisation . Les nombres complexes entiers, à virgule flottante et sont pris en charge, ainsi que en tant que sous-ensemble de fonctions statistiques trigonométriques et . Diverses décompositions de la matrice sont fournies par l'intermédiaire de l'intégration facultative avec les bibliothèques ATLAS LAPACK et .

Une approche d'évaluation retardée est utilisée (pendant la compilation) à combiner plusieurs opérations en un seul et réduire (ou éliminer) la nécessité de temporaires. Cela est accompli par le biais de modèles récursifs et méta-programmation de modèle.

Cette bibliothèque est utile si C++ a été décidé que la langue de choix (en raison de la vitesse et/ou l'intégration capacités), plutôt que d'une autre langue comme Matlab ® ou Octave. Il est distribué sous une licence qui est utile à la fois dans les contextes commerciaux open source et . Armadillo est principalement développé à NICTA (Australie), avec contributions de partout dans le monde.

+1

+1 a l'air bien, "bon équilibre". Est-ce que quelqu'un a comparé sa vitesse à blitz, numpy ... comme dans www.scipy.org/PerformancePython laplace.py? – denis

+1

+1 pour le besoin de comparaisons empiriques. Nous avons besoin d'une sorte de bibliothèque pour que l'on puisse commencer à collecter des résultats pour différents compilateurs, systèmes d'exploitation, ... –

2

Nous avons utilisé TNT avec succès pour un certain nombre d'années. Cependant, il y a suffisamment de problèmes pour que nous évoluions vers une solution développée en interne. Les deux plus grands points de friction pour nous sont

  • Les tableaux ne sont pas thread-safe, même pour l'accès en lecture, car ils utilisent un nombre de références non thread-safe.
  • Les tableaux provoquent toutes sortes de problèmes lorsque vous écrivez du code const-correct.

Si ce ne sont pas un problème, ils sont assez pratiques pour beaucoup de tâches de matrice courantes.

Questions connexes