Le mieux C++ Bibliothèque de Matrice pour éparses matrices unitaires
Je suis à la recherche d'un bien (dans le meilleur des cas, activement maintenu) C++ bibliothèque de matrice. Ainsi, il devrait être basé sur un modèle, parce que je veux utiliser un complexe de rationnels comme type numérique. Les matrices ce que je fais affaire avec sont principalement rares et unitaire.
Pouvez-vous s'il vous plaît suggérer des bibliothèques et également de donner une petite explication du pourquoi les utiliser, car je sais comment les trouver, mais je ne peut pas vraiment décider de ce qui est convenable pour moi parce que je suis absent de l'expérience avec eux.
EDIT:
Les principales opérations que je fais affaire avec sont de multiplication de matrice, multiplication scalaire avec un vecteur et produit de kronecker. La taille des matrices est exponentielle et je veux au moins être en mesure de traiter avec des matrices jusqu'à 1024 x 1024 entrées.
La plupart du temps, je suis en train de faire de la matrice de multiplication, multiplication scalaire et utiliser le produit de kronecker. Les matrices peuvent être assez peu, au moins je veux être en mesure de faire face avec 1024x1024 matrices.
OriginalL'auteur Rupert Jones | 2010-02-08
Vous devez vous connecter pour publier un commentaire.
Beaucoup de gens le faire "sérieux" de la matrice des trucs, compter sur BLAS, ajoutant LAPACK /ATLAS (normal matrices) ou UMFPACK (matrices creuses) pour plus d'mathématiques avancées. La raison en est que ce code est bien testé, stable, fiable et assez rapide. En outre, vous pouvez les acheter directement à partir d'un fournisseur (par exemple,Intel MKL) à l'écoute à l'égard de votre architecture, mais également les obtenir gratuitement. uBLAS mentionné dans Manuel répondre est probablement le standard C++ BLAS de mise en œuvre. Et si vous avez besoin de quelque chose comme LAPACK plus tard, il y a les liaisons de le faire.
Cependant, aucun de ces bibliothèques standard (BLAS /LAPACK /ATLAS ou uBLAS + fixations + LAPACK /ATLAS), les tiques de votre boîte pour être modélisé et facile à utiliser (sauf si uBLAS est tout ce dont vous aurez besoin). En fait, je dois bien avouer que j'ai tendance à appeler le C /Fortran interface directement lorsque j'utilise un BLAS /LAPACK mise en œuvre, car souvent, je ne vois pas l'avantage supplémentaire dans la uBLAS + fixations combinaison.
Si j'ai besoin d'un simple-à-utilisation, d'usage général, C++ bibliothèque de matrice, j'ai tendance à utiliser Eigen (j'ai utilisé NewMat dans le passé). Avantages:
Inconvénients (OMI):
Edit: La prochaine Propres 3.1 permet à certaines fonctions à utiliser la carte Intel MKL (ou tout autre BLAS /LAPACK mise en œuvre).
d'accord. En évitant de temps est la principale promesse de la matrice des bibliothèques de modèles de comme oonumerics.org/blitz, osl.iu.edu/research/mtl, etc. Mais vous pouvez faire la plupart de ce dans le code C, aussi, depuis BLAS routines de ne pas copier les matrices mais le travail en place, si possible.
vous pouvez épargner quelques temporaires en mettant tout en place, mais il y a d'autres choses que de l'expression des modèles d'optimisation. Par exemple, dans une bibliothèque C si vous ne add(A, ajouter(B, add(C, D))) alors les résultats intermédiaires doivent être calculés, et chaque étape consiste à faire une boucle, de sorte que, au total, vous disposez de 3 boucles. Avec l'expression de modèles le résultat n'est évaluée qu'une fois: 1 boucle.
Eigen semble utiliser de droite à gauche de multiplication qui est un peu étrange.
uBLAS n'est pas un wrapper, c'est entièrement implémenté en c++.
OriginalL'auteur stephan
Boost uBLAS, parce qu'il est passé le coup de pouce de filtre.
Il y a quelques modèle de libs qui prennent en charge matrices creuses, de sorte qu'il est vraiment difficile de trouver une meilleure justification si vous n'êtes pas plus précis sur vos besoins.
OriginalL'auteur Manuel
Vous devriez également essayer de MLT et HASEM la Matrice C++ de la Bibliothèque. Le dernier est très bien documenté.
OriginalL'auteur nidam