Question

Je cherche un bon (dans le meilleur des cas activement maintenu) C ++ bibliothèque matricielle. Ainsi, il devrait être templated, parce que je veux utiliser un complexe de type numérique comme rationals. Les matrices ce que je traite sont principalement rares et unitaire.

Pouvez-vous s'il vous plaît suggérer des bibliothèques et aussi donner une petite explication pourquoi les utiliser, parce que je sais comment les trouver, mais je ne peux pas vraiment décider ce qui est convenable pour moi parce que je manque l'expérience avec eux.

EDIT:

Les principales opérations que je traite sont multiplication matricielle , multiplication scalaire avec un vecteur et produit kronecker . La taille des matrices est exponentielle et je veux au moins être en mesure de traiter des matrices jusqu'à 1024x1024 entrées.

Était-ce utile?

La solution

Beaucoup de gens qui font des choses de la matrice "grave", se fondent sur BLAS , ajoutant LAPACK / UMFPACK (clairsemée matrices) pour les mathématiques avancées. La raison en est que ce code est bien testé, stable, fiable et très rapide. De plus, vous pouvez les acheter directement auprès d'un fournisseur (par exemple Intel MKL ) à l'écoute vers votre architecture, mais aussi les obtenir gratuitement. uBLAS mentionné dans réponse de Manuel est probablement l'implémentation standard C ++ BLAS. Et si vous avez besoin quelque chose comme LAPACK plus tard, il y a liaisons pour le faire.

Cependant, aucune de ces bibliothèques standard (BLAS / LAPACK / ATLAS ou uBLAS + fixations + LAPACK / ATLAS) les tiques de votre boîte pour être basé sur un modèle et facile à utiliser (sauf si uBLAS est tout ce que vous aurez besoin). En fait, je dois admettre, que je tends à appeler l'interface C / Fortran directement lorsque j'utilise une implémentation BLAS / LAPACK, puisque dans la combinaison uBLAS + bindings je ne vois pas souvent beaucoup d'avantage supplémentaire.

Si je besoin d'un simple à utiliser, à usage général C ++ bibliothèque de matrice, je tendance à utiliser Eigen (je l'habitude d'utiliser newMat dans le passé) . Avantages:

  • assez rapide sur l'architecture Intel, probablement le plus rapide pour les matrices plus petites
  • interface agréable
  • presque tout ce que vous attendez d'une bibliothèque matricielle
  • vous pouvez facilement ajouter nouveaux types

Inconvénients (IMO):

  • monoprocesseur [ Modifier partie fixe en Eigen 3.0 ]
  • [ Modifier ont également amélioré dans Eigen 3,0] plus lente pour les matrices plus grandes et quelques calculs avancés que ATLAS ou Intel MKL (par exemple de décomposition LU)
  • uniquement un support expérimental pour les matrices creuses [ Edit: améliorée dans la version 3.1 à venir].

Modifier La prochaine Eigen 3.1 permet des fonctions d'utiliser le processeur Intel MKL (ou toute autre mise en œuvre BLAS / LAPACK)

.

Autres conseils

Boost uBLAS , car il est passé le filtre Boost.

Il y a quelques libs modèles qui prennent en charge les matrices creuses, il est donc très difficile de trouver une meilleure raison d'être si vous n'êtes pas plus précis sur vos besoins.

Vous devriez aussi essayer MLT et Hasem Matrice bibliothèque C ++. Le dernier est très bien documenté.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top