MathGroup Archive 2003

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

Search the Archive

RE: a little more complex list operation

  • To: mathgroup at smc.vnet.net
  • Subject: [mg40256] RE: [mg40237] a little more complex list operation
  • From: "David Park" <djmp at earthlink.net>
  • Date: Fri, 28 Mar 2003 04:31:09 -0500 (EST)
  • Sender: owner-wri-mathgroup at wolfram.com

Nathan,

Mathematica is great at this stuff and if you expect to do a lot of it you
should read up on Map and pure functions.

data = {{x1, y1}, {x2, y2}, {x3, y3}};

{f[First[#]], g[Last[#]]} & /@ data
{{f[x1], g[y1]}, {f[x2], g[y2]}, {f[x3], g[y3]}}

Another method that has a pure function with another pure function inside.

MapThread[#1[#2] &, {{f, g}, #}] & /@ data
{{f[x1], g[y1]}, {f[x2], g[y2]}, {f[x3], g[y3]}}

Here is an example with specific functions, squaring for f and Cos for g. We
have more pure functions embedded. Remember that a pure function stands in
the place of a name of a function.

(MapThread[#1[#2] & , {{#1^2 & , Cos}, #1}] & ) /@ data
{{x1^2, Cos[y1]}, {x2^2, Cos[y2]}, {x3^2, Cos[y3]}}

Probably not as efficient for long data lists is

data /. {x_, y_} :> {f[x], g[y]}
{{f[x1], g[y1]}, {f[x2], g[y2]}, {f[x3], g[y3]}}


I don't know exactly what you mean by "applying only one transform". It is
probably not

f[data]
f[{{x1, y1}, {x2, y2}, {x3, y3}}]

nor

f /@ data
{f[{x1, y1}], f[{x2, y2}], f[{x3, y3}]}

but more likely

Map[f, data, {2}]
{{f[x1], f[y1]}, {f[x2], f[y2]}, {f[x3], f[y3]}}

or

f @@ # & /@ data
{f[x1, y1], f[x2, y2], f[x3, y3]}

You can see that there are many ways of manipulating data lists with
Mathematica. The ability of functional programming to manipulate data
structures is one of Mathematica's neatest features.

David Park
djmp at earthlink.net
http://home.earthlink.net/~djmp/




From: Nathan Moore [mailto:nmoore at physics.umn.edu]
To: mathgroup at smc.vnet.net

Thanks very much for all the previous replies.  Another simple question -
though I guess this will require more complex syntax.  Suppose I have the
list,

data = {{x1,y1},{x2,y2},{x3,y3}}

and I want to produce the result (for fitting/plotting)

data2 = {{f[x1],g[y1]},{f[x2],g[y2]},{f[x3],g[y3]}}

I assume that if there was only one transform I wanted to apply, f[x],
then I could say
	data2 = f[data]
but how about this more complicated transform with functions f and g?

again thanks!  Your replies have been very helpful!

Nathan Moore, University of Minnesota Physics




  • Prev by Date: Rationalize denominator of a complex value formula using Abs
  • Next by Date: Fit with lists instead of functions
  • Previous by thread: Re: a little more complex list operation
  • Next by thread: waiting command