MathGroup Archive 2005

[Date Index] [Thread Index] [Author Index]

Search the Archive

How to quickly find number of non-zero elements in sparse matrix rows?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg56841] How to quickly find number of non-zero elements in sparse matrix rows?
  • From: Matt Pharr <matt at pharr.org>
  • Date: Sat, 7 May 2005 04:17:07 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

I have a sparse matrix, roughly 200k by 200k, with about .01% of the
entries non zero, represented with SparseArray.  I'd like to reasonably
efficiently generate a 200k-long list where each element is the number of
non-zero entries in the corresponding row of the matrix.  I haven't been
able to figure out a quick way to do this.

One approach I've tried is the following (using a made up SparseArray of
an identity matrix to illustrate the point):

In[76]:= sa = SparseArray[Table[{i,i}\[Rule]1, {i, 200000}]];
In[77]:= rowLen[sa_, r_] :=  Length[ArrayRules[Take[sa, {r}]]]-1

However, it's quite slow--about 1/10 of a second for each value computed
(on a 1GHz Mac G4)

In[80]:= Table[rowLen[sa,i], {i,100}] // Timing
Out[80]=
{12.4165 Second,{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}}

I've got to assume that there's an efficient way to do this--does anyone
have any suggestions?

thanks,
-matt
-- 
Matt Pharr    matt at pharr.org    <URL:http://graphics.stanford.edu/~mmp>
=======================================================================
In a cruel and evil world, being cynical can allow you to get some
entertainment out of it. --Daniel Waters


  • Prev by Date: keyboard shorcut smorgasbord
  • Next by Date: Re: letrec/named let
  • Previous by thread: keyboard shorcut smorgasbord
  • Next by thread: Re: How to quickly find number of non-zero elements in sparse matrix rows?