Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2012

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Group and Replace itens sequence in a list

  • To: mathgroup at smc.vnet.net
  • Subject: [mg127842] Re: Group and Replace itens sequence in a list
  • From: Murta <rodrigomurtax at gmail.com>
  • Date: Sun, 26 Aug 2012 02:51:23 -0400 (EDT)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • Delivered-to: l-mathgroup@wolfram.com
  • Delivered-to: mathgroup-newout@smc.vnet.net
  • Delivered-to: mathgroup-newsend@smc.vnet.net
  • References: <20120823065202.F18956843@smc.vnet.net> <20120824090452.29BC26855@smc.vnet.net>

Good point Fred

You example remembered me I miss in Mathematica the possibility to work with inter row operations in a simpler way (simpler than ListConvolve).
For example, the Position function (or some new one) could looking for not just one element in the list, but for sequence of elements too and retur it position. With this option we could avoid to use partition in your solution.
The problem with Partition in large list is the waste of memory. See the example:

data = RandomReal[1, 10^6]
m1 = ByteCount[data];
m2 = ByteCount[Partition[data, 3, 1]];
N@m2/m1
Out[1]=3

We break the list and then search. The best performance way would be search the sequence (a,b,a) without break it.
Map function to me is a good example of function that could have one "MapOverPartition". It would save a lot of memory.

tks
Murta

On Saturday, August 25, 2012 5:26:30 AM UTC-3, Fred Simons wrote:
> Solutions with pattern matching can be very elegant, such as Bob 
> 
> Hanlon's solution, but also tend to be very slow when the problem is a 
> 
> little bit larger.
> 
> 
> 
> Here is a solution by finding the position of the triple {a,b,a} and 
> 
> then taking the parts of the list outside these triples.
> 
> 
> 
> g[lst_] := With[{limits=Partition[Flatten[{1, 
> 
> Position[Partition[lst,3,1], {a,b,a}] /. 
> 
> {n_Integer}->{n-1,n+3},Length[lst]}],2]}, Take[lst, #]& /@ limits]
> 
> 
> 
> In the following commands f is Bob's function:
> 
> 
> 
> In[4]:= lst={1,2,3,a,b,a,4,5,6,a,b,c,7,8,9,a,b,a,10,11,12} ;
> 
> z1=f[lst]; // Timing
> 
> z2=g[lst]; // Timing
> 
> z1===z2
> 
> Out[5]= {0.,Null}
> 
> Out[6]= {0.,Null}
> 
> Out[7]= True
> 
> 
> 
> Both functions are fast enough. Now we make the list 500 times longer:
> 
> 
> 
> In[12]:= lstt=Flatten[Table[lst, {500}],1];
> 
> z1=f[lstt]; // Timing
> 
> z2=g[lstt]; // Timing
> 
> z1===z2
> 
> Out[13]= {5.007632,Null}
> 
> Out[14]= {0.015600,Null}
> 
> Out[15]= True
> 
> 
> 
> Fred Simons
> 
> Eindhoven University of Technology
> 
> 
> 
> 
> 
> Op 24-8-2012 11:04, Bob Hanlon schreef:
> 
> > Clear[f]
> 
> >
> 
> > f[list_?VectorQ] := Cases[
> 
> >    (list //. {s___, a, b, a, r___} -> {{s}, {r}}) /.
> 
> >     {} ->
> 
> >      Sequence[], _?VectorQ, Infinity]
> 
> >
> 
> > f[{1, 2, 3, a, b, a, 4, 5, 6, a, b, c, 7, 8, 9, a, b, a, 10, 11, 12}]
> 
> >
> 
> > {{1, 2, 3}, {4, 5, 6, a, b, c, 7, 8, 9}, {10, 11, 12}}
> 
> >
> 
> > f[{a, b, a, 1, 2, 3, a, b, a, 4, 5, 6, a, b, c, 7, 8, 9, a, b, a, 10,
> 
> >    11, 12}]
> 
> >
> 
> > {{1, 2, 3}, {4, 5, 6, a, b, c, 7, 8, 9}, {10, 11, 12}}
> 
> >
> 
> > f[{1, 2, 3, a, b, a, 4, 5, 6, a, b, c, 7, 8, 9, a, b, a, 10, 11, 12,
> 
> >    a, b, a}]
> 
> >
> 
> > {{1, 2, 3}, {4, 5, 6, a, b, c, 7, 8, 9}, {10, 11, 12}}
> 
> >
> 
> > f[{a, b, a, 1, 2, 3, a, b, a, 4, 5, 6, a, b, c, 7, 8, 9, a, b, a, 10,
> 
> >    11, 12, a, b, a}]
> 
> >
> 
> > {{1, 2, 3}, {4, 5, 6, a, b, c, 7, 8, 9}, {10, 11, 12}}
> 
> >
> 
> >
> 
> > Bob Hanlon
> 
> >
> 
> >
> 
> 
> >> Hi All
> 
> >>
> 
> >>     I have a simple problem that is:
> 
> >>
> 
> >> l={1,2,3,a,b,a,4,5,6,a,b,c,7,8,9,a,b,a,10,11,12}
> 
> >>
> 
> >> I want to replace all a,b,a sequence by X to get:
> 
> >>
> 
> >> l={1,2,3,X,4,5,6,a,b,7,8,9,X,10,11,12}
> 
> >>
> 
> >> Then I want to group it by X intervals as
> 
> >> l={{1,2,3},{4,5,6,a,b,7,8,9},{10,11,12}}
> 
> >>
> 
> >> If I don't need to put the intermediate X, even better!
> 
> >> I think the with pattern, RaplaceAll and DeleteCases I can do It. Some clue?
> 
> >> Tks
> 
> >> Murta
> 
> >>
> 
> >>
> 
> >>
> 
> >
> 
> >
> 
> > -----
> 
> > Geen virus gevonden in dit bericht.
> 
> > Gecontroleerd door AVG - www.avg.com
> 
> > Versie: 2012.0.2197 / Virusdatabase: 2437/5219 - datum van uitgifte: 08/23/12
> 
> >
> 
> >
> 
> >



  • Prev by Date: Mathematica issue
  • Next by Date: A problem with Manipulate
  • Previous by thread: Re: Group and Replace itens sequence in a list
  • Next by thread: Re: Group and Replace itens sequence in a list