Re: any better to apply a function to second column?
- To: mathgroup at christensen.cybernetics.net
- Subject: [mg525] Re: [mg507] any better to apply a function to second column?
- From: el at qua.crl.melco.co.jp (E. Lange)
- Date: Thu, 9 Mar 95 14:57:13 JST
> > I would like to know if there is a better way to
> > do the following.
> >
>
> > Suppose I have list of numbers in pairs:
> >
>
> > a = {{x1,y1},{x2,y2},...,{xn,yn}}
> >
>
> > I would like to apply to the sequence {y1,y2,...,yn} the function
> > f so that a new sequence
> >
>
> > b = {{x1,f[y1]},{x2,f[y2]},...,{xn,f[yn]}}
> >
>
> > is generated.
>
>
> Hello Richard,
>
> I think the shortest and clearest method is this:
>
> b = Apply[{#1, f[#2]}&, a, {1}];
>
> > Also, what if I have a matrix of 3 or more columns and I would apply
> > f to only the second column, say. What is a better way in this case?
>
> The Apply method generalizes to an unknown number of additional columns
> like this:
>
> b = Apply[{#1, f[#2], ##3}&, a, {1}];
>
Yet another short and clear method (also works with any number of
additional columns):
b = MapAt[f, #, 2]& /@ a
Compared to
b = Apply[{#1, f[#2], ##3}&, a, {1}]
the MapAt method is about 2.5 times faster, if there are many columns,
and about 10% slower, if there are only a few columns.
Eberhard Lange