views:

68

answers:

2

In Matlab, at what point is having a sparse array better than a normal array if I still have a lot of calculations to do on it, and about 25% of the array are non-zeros?

+2  A: 

Edit- misread the quesiton.

With 75% sparsity, you may very well see a significant performance increase with sparse matrix algorithms. I'd say it is definitely worth giving a try.

The two places where you will save- memory (reducing your memory use by a factor of four) and operations (each time you do a matrix-vector multiply, for example, you'll be greatly reducing the number of operations required). The mitigating factor in your case, may well be the size of your matrix. Moving to sparse matrix operation, you typically lose the nice caching characteristics you see with dense matrices. Thus, there is usually a threshold where the move from dense to sparse leads to efficiency increases.

MarkD
+6  A: 

Personally, I'd rarely bother with sparse for an array that is only 25% non-zeros. If you don't believe me, try it yourself.

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.

The extra work involved with this as a sparse matrix costs too much to be worth the bother. Now try it with a really sparse matrix.

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.

Of course, your own problem will be different, but it will not be that different. Sparse matrices are a true boon for the person who uses truly sparse matrices, but 25% non-zeros is simply not "sparse" enough for any gain in most cases.

woodchips