The Math Forum



Search All of the Math Forum:

Views expressed in these public forums are not endorsed by NCTM or The Math Forum.


Math Forum » Discussions » Inactive » comp.soft-sys.math.mathematica

Topic: Group and Replace itens sequence in a list
Replies: 10   Last Post: Aug 29, 2012 1:14 AM

Advanced Search

Back to Topic List Back to Topic List Jump to Tree View Jump to Tree View   Messages: [ Previous | Next ]
Murta

Posts: 86
Registered: 7/5/10
Re: Group and Replace itens sequence in a list
Posted: Aug 26, 2012 2:51 AM
  Click to see the message monospaced in plain text Plain Text   Click to reply to this topic Reply

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
>
> >
>
> >
>
> >




Point your RSS reader here for a feed of the latest messages in this topic.

[Privacy Policy] [Terms of Use]

© The Math Forum at NCTM 1994-2017. All Rights Reserved.