[SciPy-user] Random sparse matrices

Anne Archibald peridot.faceted at gmail.com
Fri Apr 25 16:04:00 EDT 2008


On 25/04/2008, Nathan Bell <wnbell at gmail.com> wrote:
> On Fri, Apr 25, 2008 at 9:17 AM, Mico Filós <elmico.filos at gmail.com> wrote:
>  > Dear all,
>  >
>  >  here is my first attempt. I basically use Nathan's suggested
>  >  functions, and _rand_sparse incorporates the algorithm proposed by
>  >  David to avoid ending up with fewer nonzero elements than expected. It
>  >  is the first time I propose an update
>  >  for scipy code, so be lenient with me :)
>
>
> Thanks for your contribution Mico.  Unfortunately, the line
>
>    rand_seq = permutation(m*n)[:nnz]
>
> is a *dense* MxN operation, so we cannot use this approach.
>
>  MATLAB's sprand() and sprandn() have the same artifact as the code I
>  presented, so I don't know whether it's worth trying to avoid the
>  duplicate entries.
>
>  If you can figure out an economial way to produce exactly nnz elements
>  in the result, then we would probably use it.  I wasn't able to come
>  up with anything better than the MATLAB approach.

Here's an approach that works. Not ideal, but still only O(nnz): pick
nnz distinct integers. Throw out any repeats and pick replacements.
Repeat until you have no repeats. Requires an average of just a few
iterations unless nnz>(m*n)/2 (say), in which case you can safely just
use permutation().

Anne
-------------- next part --------------
A non-text attachment was scrubbed...
Name: sprand.py
Type: text/x-python
Size: 730 bytes
Desc: not available
URL: <http://mail.scipy.org/pipermail/scipy-user/attachments/20080425/0e9bcb19/attachment.py>


More information about the SciPy-User mailing list