2010-07-20 4 views
11

Dans Matlab, à quel point a un tableau clairsemé meilleur qu'un tableau normal si j'ai encore beaucoup de calculs à faire, et environ 25% du tableau sont non-zéros?Sparse vs Normal Array Matlab

Répondre

21

Personnellement, je m'embêterais rarement avec sparse pour un tableau qui n'est que de 25% non-zéros. Si vous ne me croyez pas, essayez-le vous-même.

A = sprand(2000,2000,0.25); 
tic,B = A*A;toc 
Elapsed time is 1.771668 seconds. 

Af = full(A); 
tic,B = Af*Af;toc 
Elapsed time is 0.499045 seconds. 

Le travail supplémentaire impliqué avec ceci comme une matrice clairsemée coûte trop cher pour valoir la peine. Maintenant, essayez-le avec une matrice vraiment clairsemée.

A = sprand(2000,2000,0.005); 
Af = full(A); 

tic,B = A*A;toc 
Elapsed time is 0.037763 seconds. 

tic,B = Af*Af;toc 
Elapsed time is 0.446680 seconds. 

Bien sûr, votre propre problème sera différent, mais il ne sera pas si différent. Les matrices éparses sont une véritable aubaine pour la personne qui utilise des matrices vraiment rares, mais 25% de non-zéros n'est simplement pas assez "clairsemé" pour tout gain dans la plupart des cas.

4

Édition - mal lu la question.

Avec 75% de parcimonie, vous pouvez très bien voir une augmentation significative des performances avec des algorithmes à matrice creuse. Je dirais que ça vaut vraiment le coup d'essayer.

Les deux endroits où vous économiserez de la mémoire (en réduisant votre utilisation de la mémoire par quatre) et des opérations (chaque fois que vous effectuez une multiplication matricielle-vectorielle, par exemple, vous réduirez considérablement le nombre d'opérations Champs obligatoires). Le facteur atténuant dans votre cas, pourrait bien être la taille de votre matrice. En passant à une opération matricielle clairsemée, vous perdez généralement les caractéristiques de mise en cache que vous voyez avec des matrices denses. Ainsi, il y a généralement un seuil où le passage de dense à clairsemé entraîne une augmentation de l'efficacité.