Sparse vs Normal Array Matlab

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?

Answers


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.


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.


Need Your Help

Prevent Fragment recovery in Android

android memory-management garbage-collection fragment recreate

We are using Fragments and we don't need them to be automatically recovered when the Activity is recreated.

php while loop variable for every third div

php mysql while-loop

Is their a way in a while loop to assign a variable to a class in a div, for every third item in a while loop. I am using the blueprint structure and the third div is at the end and i need to attac...