Hi all,
<div><br></div><div>I've been working quite a lot with sparse vectors and sparse matrices (basically</div><div>as feature vectors in the context of machine learning), and have noticed that they</div><div>do crop up in a lot of places (e.g. the CVXOPT library, in scikits, ...) and that people</div>
<div>tend to either reinvent the wheel (i.e. implement a complete sparse matrix library) or</div><div>pretend that no separate data structure is needed (i.e. always passing along pairs of</div><div>coordinate and data arrays).</div>
<div>I do think there would be some benefit to having sparse vectors/matrices or tensors</div><div>(in parallel to numpy's arrays, which can be vectors or arbitrary-order tensors) with a</div><div>standardized interface so that different packages (e.g. eigenvalue/SVD computation,</div>
<div>least-squares and other QPs, but possibly also things like numpy.bincount as well as</div><div>computations that are more domain-specific) can be more interoperable than they are now.</div><div><br></div><div>One problem that I see is that people doing PDE solving usually want banded matrices,</div>
<div>whereas other people (including me) do most of their work with coordinate-list or CSR</div><div>matrices, which normally means some variation in the actual implementations for different</div><div>domains, and it's also possible that the most convenient interface for a sparse matrix is not</div>
<div>the most convenient one for a dense matrix (and vice-versa), but I think it would be nice</div><div>if there were some kind of standardized data structure or maybe just a standardized vtable-based</div><div>interface (similar to Python's buffer interface) that would allow all sparse matrix packages to</div>
<div>interoperate with each other in some meaningful (even if not most-efficient) way.</div><div><br></div><div>I'd be willing to adapt the code that I have (C++- and Cython-based) to this kind of interface</div><div>
to provide some kind of 'reference' implementation, but before inventing the N+1th solution</div><div>to the problem, I'd be curious what other people's opinions are.</div><div><br></div><div>Yannick</div>
<div><br></div>