Re: Grouping similar indices together in an expression

*To*: mathgroup at smc.vnet.net*Subject*: [mg65246] Re: [mg65242] Grouping similar indices together in an expression*From*: Andrzej Kozlowski <akoz at mimuw.edu.pl>*Date*: Wed, 22 Mar 2006 06:13:36 -0500 (EST)*References*: <200603211246.HAA19581@smc.vnet.net>*Sender*: owner-wri-mathgroup at wolfram.com

On 21 Mar 2006, at 13:46, David Sanders wrote: > Hi, > > I am a newbie in Mathematica, and am trying to do the following. > > I have terms which look like > a[i] a[j] b[i] b[j] > > I need to apply a function F, for which I need to group the different > indices (by which I mean i, j) together as follows: > > F(a[i] a[j] b[i] b[j]) = F(a[i] b[i]) F(a[j] b[j]) > > I do not in general know how many different indices there might be > in a > term. E.g. I might have > a[i] a[j] a[k] b[j] > > Could somebody please give me a hint as to how to do this? > > Thanks, > David. > As long as you do not mind the order of the terms being re-arranged, the following should do what you want: GroupTerms[m_Times, f_] := Times @@ Apply[f, Split[Sort[List @@ m, OrderedQ[{#1[[1]], #2[[1]]}] & ], #1[[1]] === #2[[1]] & ], {1}] For example: GroupTerms[a[1]*a[2]*b[1]*b[2]*c[1]*c[3], f] f[c[3]]*f[a[2], b[2]]*f[a[1], b[1], c[1]] which separates all terms according to the "index" . Andrzej Kozlowski

**References**:**Grouping similar indices together in an expression***From:*"David Sanders" <dpsanders@gmail.com>