Re: Sparse Array Question

*To*: mathgroup at smc.vnet.net*Subject*: [mg130582] Re: Sparse Array Question*From*: Bill Rowe <readnews at sbcglobal.net>*Date*: Wed, 24 Apr 2013 06:58:47 -0400 (EDT)*Delivered-to*: l-mathgroup@mail-archive0.wolfram.com*Delivered-to*: l-mathgroup@wolfram.com*Delivered-to*: mathgroup-outx@smc.vnet.net*Delivered-to*: mathgroup-newsendx@smc.vnet.net

On 4/23/13 at 12:04 AM, chris.arthur1 at gmail.com (christopher arthur) wrote: >I have a list of rules for defining a SparseArray. The list has >some coordinates repeated with different values. If a coordinate >appears in the list more than once, I want to sum up the values, and >then have a SparseArray >i.e., if my list were myList={{1,1}->1,{2,1}->2,{1,1}->3} then my >SparseArray should have {1,1}->4. I've tried using ReplacePart on >an array to say myArray=ReplacePart[myArray,...] but this seems >horribly inefficient as a way to change values in an array. >I'm using Mathematica 5.2 For your version this can be done as: In[3]:= (#[[1, 1]] -> Total[#[[All, 2]]]) & /@ Split[Sort[myList], SameQ[#1[[1]], #2[[1]]] &] Out[3]= {{1,1}->4,{2,1}->2} for version 7 and later this can be simplified to: In[4]:= (#[[1, 1]] -> Total[#[[All, 2]]]) & /@ GatherBy[myList, First] Out[4]= {{1,1}->4,{2,1}->2}