2010-02-22 7 views
4

J'ai une matrice bidimensionnelle. Ma matrice est éparse. Je suis confronté à un problème de performance. Quelqu'un peut-il répondre s'il vous plaît quel api ou classe je peux utiliser dans Java pour gérer la matrice clairsemée pour améliorer les performances de mon programme.java sparse matrix problem

Par exemple, je veux

it take 100x100 matrix 
handle sparse stuff 
do the multiplication 
return me my matrix same as 100x100 with 0 (mean sparse matrix) 
+3

Il serait utile de savoir quelle est votre implémentation actuelle? De plus, quelles structures de données utilisez-vous? –

Répondre

0

Avez-vous essayé d'utiliser Jama? http://math.nist.gov/javanumerics/jama/ - ils ne supportent pas directement les matrices creuses, mais c'est un paquet largement utilisé.

En outre, princeton semble avoir une mise en œuvre de la matrice clairsemée pour vous de jeter un oeil à http://www.cs.princeton.edu/introcs/44st/SparseMatrix.java.html

+1

J'utilise jama pour SVD. Pouvez-vous indiquer comment utiliser jama à cette fin? Je pense que jama est pour matrice dense – user238384

6

Jama est terrible pour les grandes matrices creuses. Regardez la bibliothèque d'algèbre linéaire Colt.


Une autre possibilité pour l'algèbre linéaire clairsemée est une bibliothèque the apache commons. Peut-être un peu plus léger que Colt, mais la différence avec le look-and-feel de Jama pourrait être un peu plus grande.

+0

@mobrule: Comment Fortran est-il pour ça? Parce que dans le lien que vous avez donné il est écrit que Java gagne de plus en plus d'adoption et peut atteindre 90% de la vitesse de Fortran. Comment est 90% de la vitesse de Fortran? Est-ce horrible? (Par la suite, je fais de gros calculs en Java) – SyntaxT3rr0r

+0

Impossible de commenter les performances, mais +1 sur API pour Colt. – omerkudat

+0

@Wizard, Fortran est un langage compilé, comme C. Vous n'obtiendrez rien plus rapidement à moins que vous ne l'écriviez en assembleur. – mob

1

SuanShu a une grande collection de matrices creuses mises en œuvre. Vous pouvez simplement utiliser ceux-ci au lieu d'écrire le vôtre.

Ils prennent actuellement en charge les formats suivants: la RSE, DOK, LIL

0

Vous pouvez regarder la4j (algèbre linéaire pour Java). Le la4j supporte des matrices éparses ainsi que des matrices denses. Voici la liste des types de matrice pris en charge: 1D-Array (dense), 2D-Array (dense), CRS - Stockage de lignes compressées (clairsemé), CCS - Stockage de colonnes compressées (clairsemé).