Notifications
Clear all

[Closed] Free source: Sparse Matrix

Hey guys, here is some code for a sparse matrix I wrote. This is a very general struct that many people may find useful.

A sparse matrix works like a regular matrix except that it does not waste memory by storing blank entries, so it is ideal if you want to be storing values over a large range of space but still want to be able to look up values quickly.

To store some values at [1,1] and [300,400] in a regular matrix would require a 300×400 matrix…and would store 120,000 values. A sparse matrix can store this using only 6 values.
The sparse matrix also allows you to store and retrieve elements pretty quickly. If your matrix is very sparse it will take O(1) time to get/set a value (same as regular matrix). If your matrix is very dense it can take up to O® time to get/set, where r is the number of values in the row you are looking at.

Example:

m = (sparseMatrix2d 0) –where 0 is default value for unassigned coordinates
m.setValue 200 300 4
m.getValue 200 300 –returns 4
m.getValue 200 299 –returns 0
m.erase
m.getValue 200 300 –returns 0

3 Replies
 rdg

thank you.
I like it.

Georg

1 Reply
(@f97ao)
Joined: 11 months ago

Posts: 0

Haha, this is great. Only yesterday me and a collegue was discussing spare matrices and that they can be extremely useful at times
/Andreas

I have added two additional types of sparse matrices.

The first type, sparseMatrix2d, is for row/col indexing, starting at 1,1

Now I provide sparseMatrix3d which allows x/y/z indexing starting at 1,1,1

Also, sparseMatrix3dc, which allows x/y/z indexing from negative infinity to infinity

Usage is exactly the same as the first kind

eg,

m = (sparseMatrix3dc 0)
m.setValue -200 0 1 3
m.getValue -200 0 1 –returns 3