# [SciPy-user] New sparse matrix functionality

Robert Cimrman cimrman3 at ntc.zcu.cz
Mon Feb 27 04:23:32 CST 2006

```Hi Ed,

Ed Schofield wrote:
> My branch also changes one aspect of the existing behaviour: the
> todense() method now returns a dense (NumPy) matrix, rather than a dense
> array.  Converting to a dense array is now available under a toarray()
> method (or .A attribute) instead.  The rationale behind this change is
> to emphasize that sparse matrices are closer to dense matrices than to
> dense arrays in their attributes (e.g. .T for transpose) and behaviour
> (e.g. * means inner product).  I've also been careful to make
> multiplication between sparse matrices and dense row or column vectors
> (matrix objects with unit length or height) return matrices of the
> correct dimensions, rather than arrays.  Several unit tests relied on
> the old behaviour, and I've changed these accordingly.  Most of these
> test changes are just simplifications -- for example
>
>     assert_array_equal((a*c).todense(), a.todense() * c)
>
>
>     assert_array_equal((a*c).todense(), dot(a.todense(), c))
> -- but I'd appreciate some criticism and feedback on which behaviour
> people prefer.

well done! I think it's better your way - if a vector (i.e. 2D array) is
put in, it is expected that a vector gous out as well.

Do you also plan to add the c-based linked-list matrix as in PySparse
(ll_mat.c there)? This could be even faster than using the Python lists
(IMHO...).

> These changes have highlighted a problem present in both the main trunk
> and my branch: that multiplying a dense matrix 'a' by a sparse matrix
> 'b' is not possible using the syntax 'a*b'.  I'll follow this up with a
> proposal to numpy-discussion on how we can solve this.

I am very curious how to do this. Surely NumPy will have to be aware of
existence of sparse matrix objects, right?

r.

```