Re: Summing over like elements
- To: mathgroup at smc.vnet.net
- Subject: [mg13863] Re: [mg13855] Summing over like elements
- From: Carl Woll <carlw at fermi.phys.washington.edu>
- Date: Wed, 2 Sep 1998 01:30:58 -0400
- Sender: owner-wri-mathgroup at wolfram.com
Hi Mitchell, There are many ways to tackle this kind of problem. Here is one idea, which is hopefully pretty efficient. We'll see how it manages against ideas from other posters. First, I'll define a function which takes as an argument a list of your pairs which have the same first value, and returns a pair with the second values summed. Combine[{a_}] := a Combine[a] := {a[[1,1]], Plus@@Last/@a} So, as a check, we should have Combine[ {{1,.3}} ] {1,.3} and Combine[ {{1,.3},{1,.4}} ] {1,.7} Now, we sort your list, and then split it up into sets with common first values. If data is your list, then Split[Sort[data], First[#1]==First[#2]& ] will do that. Mapping the function Combine onto this list will give you what you want. So, the complete function, which I will call Tally, is Tally[data_] := Combine /@ Split[Sort[data], First[#1]==First[#2]&] Combine[{a_}] := a Combine[a] := {a[[1,1]], Plus@@Last/@a} Good luck! Carl Woll Dept of Physics U of Washington On Mon, 31 Aug 1998, Mitchell Kaplan wrote: > I have a 2 column array. Column 1 has some values, many of which are > repeated. Column 2 has probabilities of these values. > > I would like to sum the probabilities for each unique element in column > 1. For example: > > {{1, .5} , {2, .2} , {1, .1}} should give me: > > {{1, .6} , {2, .2}} > > > I'm sure I can do this with a "Do" loop -- however it seems that in > general "Do's" are pretty innefficient. > > Does anyone have any suggestions? > > Mitch > >