Re: How to quickly find number of non-zero elements in sparse matrix rows?
- To: mathgroup at smc.vnet.net
- Subject: [mg56856] Re: [mg56841] How to quickly find number of non-zero elements in sparse matrix rows?
- From: Chris Chiasson <chris.chiasson at gmail.com>
- Date: Sat, 7 May 2005 15:35:18 -0400 (EDT)
- References: <200505070817.EAA20272@smc.vnet.net>
- Reply-to: Chris Chiasson <chris.chiasson at gmail.com>
- Sender: owner-wri-mathgroup at wolfram.com
Matt,
Try this:
<<LinearAlgebra`MatrixManipulation`
MatrixPlot[sa=SparseArray[Table[{i+20,i+20}\[Rule]1,{i,200}]]];
arules=First@First@##&/@Most@ArrayRules[sa];
<<Statistics`DataManipulation`
frules=Append[Rule@@@Reverse/@Frequencies@arules,_?NumericQ->0];
populationlist=(Range@Length@sa)/.frules
Regards,
On 5/7/05, Matt Pharr <matt at pharr.org> wrote:
>
> 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
>
>
--
Chris Chiasson
http://chrischiasson.com/
1 (810) 265-3161
- References:
- How to quickly find number of non-zero elements in sparse matrix rows?
- From: Matt Pharr <matt@pharr.org>
- How to quickly find number of non-zero elements in sparse matrix rows?