[SciPy-dev] Scipy equivalents of MATLAB's sparse/find/accumarray

Nathan Bell wnbell@gmail....
Mon Apr 7 15:39:25 CDT 2008


On Mon, Apr 7, 2008 at 1:53 PM, Viral Shah
<vshah@interactivesupercomputing.com> wrote:
> Nathan, thanks for your earlier response on sparse matrix indexing.
>
>  The other thing that I found cumbersome with the current sparse
>  implementation in scipy is not being able to figure out the exact
>  equivalents of Matlab's sparse/accumarray and find. In the following
>  examples, I will denote Matlab codes with M>> and Python with P>>
>
>  M>> S = sparse (I, J, V, m, n)
>
>  The equivalent in Python seems to be:
>  P>> S = sparse.csc_matrix ((obj, ij), dims)
>  Or
>  P>> S = sparse.csr_matrix ((obj, ij), dims)

That's correct.  These are just wrappers for
coo_matrix((obj,ij)).tocsc() and coo_matrix((obj,ij)).tocsr().

Likewise, find() in MATLAB implemented by .tocoo().

>  It wasn't clear looking at the documentation, what happens when there
>  are duplicate row/col values. Matlab's sparse() adds duplicates, and
>  accumarray() provides a more general way to combine duplicates. I was
>  wondering, if it would be possible to add an extra argument that would
>  allow the user to specify what to do with duplicates. Options could be
>  last, any, sum, prod, max, min, argmax, argmin, or a user specified
>  function.

Currently the coo->csr and coo->csc conversions sum duplicates together.

accumarray() is probably better accomplished by argsorting the index
tuples and performing whatever transformation you wish on the permuted
values.

-- 
Nathan Bell wnbell@gmail.com
http://graphics.cs.uiuc.edu/~wnbell/


More information about the Scipy-dev mailing list