Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2009

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

Search the Archive

Re: "mapping" functions over lists, again!

  • To: mathgroup at smc.vnet.net
  • Subject: [mg96278] Re: "mapping" functions over lists, again!
  • From: dh <dh at metrohm.com>
  • Date: Tue, 10 Feb 2009 05:56:29 -0500 (EST)
  • References: <gmp0q7$c0j$1@smc.vnet.net>


Hi Paul,

you may extract the part you want to change, do some manipulation on nit 

(here mapping "f") and write it back:

shortTestdata[[All, All, -1]] =

   Map[f, shortTestdata[[All, All, -1]], {2}];



hope this helps, Daniel



Paul Ellsmore wrote:

> I am a novice, and I have asked this question before (or tried to) and

> thought that the answers I got would work, and that I understood them, =

> but

> now I realize that I didn=92t ask quite the question I thought I had, =

> and

> didn=92t understand the answers. So=85

> 

> 

> 

> I have data in the form:

> 

> 

> 

> shortTestdata = {{{40,28.0678 +1.20855 =E4},{43.094,28.0572 +1.29852

> =E4},{46.428,28.0553 +1.40023 =E4},{50.019,28.0551 +1.50876 =

> =E4},{53.888,28.0573

> +1.62452 =E4},{58.057,28.0565 +1.75026 =E4}},{{40,7.42169 +0.219859

> =E4},{43.094,7.4084 +0.234353 =E4},{46.428,7.40377 +0.252135 =

> =E4},{50.019,7.40131

> +0.271599 =E4},{53.888,7.40048 +0.292062 =E4},{58.057,7.39994 +0.314501

> =E4}},{{40,1685.53 +0.0480998 =E4},{43.094,1694.69 -0.0913363 =

> =E4},{46.428,1698.27

> -0.0273182 =E4},{50.019,1699.76 -0.0491538 =E4},{53.888,1700.52 =

> -0.217922

> =E4},{58.057,1701.16 -0.242314 =E4}},{{40,1808.7 -0.00628662 =

> =E4},{43.094,1808.52

> -0.114076 =E4},{46.428,1808.53 -0.0244589 =E4},{50.019,1808.44 -0.106166

> =E4},{53.888,1808.48 -0.176297 =E4},{58.057,1808.63 -0.289451 =E4}}} =

> that is to

> say, lists of pairs of real and complex values. Note that I mean a list =

> of

> lists (four lists in the above case). I need to keep the integrity of =

> these

> lists, while doing operations on them.

> 

> 

> 

> In particular, I want to be able to turn every pair {real, complex} into

> {real, f[complex]}. It was suggested to me that I use Cases, as follows:

> 

> 

> 

> Realpart = Cases[shortTestdata,{r_Real,c_Complex}=A6{r,Re[c]}] . If I =

> apply

> this to the first list in shortTestdata, i.e {{40,28.0678 +1.20855

> =E4},{43.094,28.0572 +1.29852 =E4},{46.428,28.0553 +1.40023 =

> =E4},{50.019,28.0551

> +1.50876 =E4},{53.888,28.0573 +1.62452 =E4},{58.057,28.0565 +1.75026 =

> =E4}} I get:

> 

> 

> 

> {{43.094,28.0572},{46.428,28.0553},{50.019,28.0551},{53.888,28.0573},{58.=

> 057

> ,28.0565}}

> 

> 

> 

> This seems to miss out the first data pair of the list. Am I making a

> mistake with the syntax?

> 

> 

> 

> I thought that the following would work for the full lists of lists:

> 

> 

> 

> realpart=Cases[shortTestdata,{r_Real,c_Complex}=A6{r,Re[c]},2] i.e =

> apply the

> rule to all parts at level 2 of shortTestdata, but I get:

> 

> 

> 

> {{43.094,28.0572},{46.428,28.0553},{50.019,28.0551},{53.888,28.0573},{58.=

> 057

> ,28.0565},{43.094,7.4084},{46.428,7.40377},{50.019,7.40131},{53.888,7.400=

> 48}

> ,{58.057,7.39994},{43.094,1694.69},{46.428,1698.27},{50.019,1699.76},{53.=

> 888

> ,1700.52},{58.057,1701.16},{43.094,1808.52},{46.428,1808.53},{50.019,1808=

> .44

> },{53.888,1808.48},{58.057,1808.63}}

> 

> 

> 

> This still misses the first pair of each list, and now flattens the

> structure, so I don=92t know where my four lists start and end any more! =

> I

> have tried Map with Cases but frankly have no idea what the syntax =

> should

> look like, and either get error messages or empty lists as output. The

> documentation shows no examples of Map on a list of lists, so maybe it =

> is

> simply not possible?

> 

> 

> 

> This is just a specific example of a difficulty I am having =

> understanding

> how Mathematica deals with lists of lists. In general I would like to be

> able to =93Map=94 functions over these lists of lists, to make =

> transformations

> such as {real, complex} -> {real, f[real, complex]} but I just cannot =

> figure

> out how to do this. Note that my datasets can be of varying length =96 =

> that

> is, the number of lists in shortTestdata can vary, and those lists will =

> not

> in general be all of the same length, so Flatten and Partition are not

> convenient to use, and I really do need the list of lists structure.

> 

> 

> 

>  Any help would be very gratefully received.

> 

> 

> 

> Thanks,

> 

> 

> 

> Paul.

> 

> 

> 

> Dr. Paul A. Ellsmore

> 

> 

> 

> Nanion Limited

> 

> Oxford Centre for Innovation

> 

> Mill Street

> 

> Oxford

> 

> United Kingdom

> 

> OX2 0JX

> 

> 

> 

> Tel: +44 (0) 1865 811175

> 

> Fax: +44 (0) 1865 248594




  • Prev by Date: Re: Re: FourierTransform
  • Next by Date: Re: newbie: explicit function works, "function object" doesn't
  • Previous by thread: Re: "mapping" functions over lists, again!
  • Next by thread: Consultant Needed