Re: how to Split sparsearray
- To: mathgroup at smc.vnet.net
- Subject: [mg74125] Re: how to Split sparsearray
- From: Peter Pein <petsie at dordos.net>
- Date: Mon, 12 Mar 2007 04:34:39 -0500 (EST)
- References: <esr1b8$6nl$1@smc.vnet.net>
Arkadiusz.Majka at gmail.com schrieb: > Hi, > > I have very long list of elements >= 0 with more than 90% of zero's > written in SparseArray structure. > > sparseList=SparseArray[list]; > > I want to split it into sublist of zeros and elements greater than > zero and obtain again Sparsearray structure. I can do it by > > Split[Normal[sparseList],#1=E2=89=A40===#2<=0&]; > SparseArray/@% > > Is it better way to do it? Is it possible to do it WITHOUT calling > Normal (to save time and cache)? > > Thx, > > Arek > > Hi Arek, you can use the ArrayRules: In[1]:= test = SparseArray[Table[(#1*Boole[#1*10 < 1] & )[Random[]], {10^6}]] Out[1]= SparseArray[<99903>,{1000000}] In[2]:= First[Timing[ notZero = SparseArray[Last /@ Most[ArrayRules[test]]]; zeroes = SparseArray[{}, {Length[test] - Length[notZero]}]; ]] Out[2]= 0.25*Second In[3]:= {zeroes, notZero} Out[3]= {SparseArray[<0>, {900097}], SparseArray[<99903>, {99903}]} HTH, Peter