While I’m not an advocate of using Erlang for heavy duty analytics, it is useful to have some of the data structures around for convenience. One such data structure is a sparse matrix which can represent data compactly while supporting a useful default. For example, problems in linear programming can easily be represented this way as well as bit masks.

I didn’t find anything resembling a sparse matrix (there are dense matrix libraries out there) for Erlang, so I rolled my own. This is an initial version, useful enough for holding a config in a gen_server. Over time it will become more robust and feature rich.

Here’s a quick example.

> A = sparse_matrix:from_triplet([
    {albany,new_york,180}, {new_york,buffalo,360},
    {new_york,montreal,325}, {boston,new_york,250} ]).
> sparse_matrix:value({new_york,montreal}, A).
325
> sparse_matrix:value({montreal,new_york}, A).
0

It’s on github and available as a rebar dependency.