2010-10-18 5 views
4

Je suis en train d'implémenter quelques algorithmes de graphes spectraux pour un projet. Une grande partie de cela consiste à trouver des valeurs propres et des vecteurs propres de grandes matrices creuses, ainsi que des matrices multiplicatrices.Bon paquet d'algèbre linéaire

Ma question est, quelles sont les bibliothèques les plus rapides qui font cela? J'ai regardé NumPy pour Python ou JAMA pour Java. Sont-ils bons, ou y a-t-il quelque chose de mieux?

Merci.

+0

Quelle est la taille de vos matrices? Sont-ils symétriques? Comment sont-ils clairsemés? Est-il nécessaire de trouver toutes les valeurs propres ou seriez-vous satisfait si vous pouviez trouver les 20 plus grandes valeurs propres de chaque matrice? (Arpack fait cela). Seriez-vous satisfait si vous pouviez dessiner un histogramme de la densité de valeurs propres sans connaître la valeur de chaque valeur propre? – nielsle

+0

Nielsle, Les matrices en question vont être très grandes (des milliers de sommets), et elles sont à la fois symétriques et éparses. Mon application doit trouver toutes les valeurs propres. Précisément, j'ai besoin de trouver toutes les valeurs propres, un vecteur propre pour chaque valeur propre, et j'ai besoin de multiplier des matrices symétriques et clairsemées. – Jeffrey

Répondre

1

tout d'abord vous devez spécifier exactement les opérations de matrice vous besoin d'effectuer. La raison en est que certaines bibliothèques sont très performantes dans quelques opérations spéciales. A titre d'exemple, Arpack est capable de trouver les plus grandes valeurs propres d'une grande matrice éparse. (Voir mes questions ci-dessus)

Mais en général NumPy/SciPy est un bon choix. Il enveloppe plusieurs librairies telles que lapack, arpack et superLU et vous offre une interface python sympa avec laquelle travailler.

Vous pouvez également utiliser octave ou MATLAB ou utiliser C++ pour encapsuler une bibliothèque spécialisée dans les opérations que vous devez effectuer. Jama a été construit pour des matrices denses, et vous voulez travailler avec des matrices éparses, donc Jama est un mauvais choix pour vous. http://math.nist.gov/javanumerics/jama/

EDIT: Je ne suis pas un expert sur tout cela, mais pour autant que je sache, vous devez trouver une bibliothèque qui utilise l'algorithme de Lanczos (http://en.wikipedia.org/wiki/Lanczos_algorithm)

La bibliothèque Arpack utilise cet algorithme, donc Arpack est un bon choix. La bibliothèque python scipy.sparse.linalg enveloppe Arpack, donc scipy est aussi un bon choix. Pour le record Lapack a également été créé pour les matrices denses, donc Lapack est un mauvais choix sauf si vos matrices sont si petites que la vitesse n'a pas d'importance. Je crois que eispack est dépassé depuis des années.