MathGroup Archive 2008

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

Search the Archive

Re: Apply function to parts of a list

  • To: mathgroup at smc.vnet.net
  • Subject: [mg86377] Re: Apply function to parts of a list
  • From: Albert Retey <awnl at arcor.net>
  • Date: Sun, 9 Mar 2008 05:07:57 -0500 (EST)
  • References: <fqo8pn$svq$1@smc.vnet.net> <fqqs3l$kfp$1@smc.vnet.net> <fqtqog$da4$1@smc.vnet.net>

=C2=B4Hi,

> More generally now : Again I have a list of list but with more
> "dimensions" Something like that :
>
> data={{x1,y1,z1,f1,g1,h1},{x2,y2,z2,f2,g2,h2},{x3,y3,z3,f3,g3,h3},...=

> {xn,yn,zn,fn,gn,hn}}
>
> And let's say I wanna, for the sake of the example, add 10 to all the
> y's i.e. I want
>
> {{x1,y1+10,z1,f1,g1,h1},{x2,y2+10,z2,f2,g2,h2},{x3,y3+10,z3,f3,g3,h3},.=
=2E.
> {xn,yn+10,zn,fn,gn,hn}}
>
> According to all your suggestions, I could do
>
> {#1,#2+10,#3,#4,#5,#6}& @@@ data
>
> Right ? Isn't there another simpler way (imagine instead of 6 elements
> (x,y,z,f,g,h), I have 100 !)
>

I think for this the transpose variation already suggested will not only =

be easiest to understand and read but probably also the most efficient
for large matrices. This is how I would do it:

create data and check that it has the dimensions you intended:

data=RandomReal[{0,1},{12,100}];
Transpose[data]//Dimensions

create a list of numbers to add to each row, here we need all zeros
except for the second entry. Of course there are numerous ways to
construct such a list, but I think this is efficient and easy to read
(for efficientcy you might want to use machine precision numbers):

addends=Table[0,{100}];
addends[[2]]=10;

now use the already known approach with transposing twice (note that you =

could use every function that is listable instead of only Times and Plus)=
:

res=Transpose[addends+Transpose[data]];

check that it did what you wanted:

res[[All,1;;3]]//MatrixForm

hth,

albert


  • Prev by Date: Re: Another Mathematica 6 bug?
  • Next by Date: Re: Assignment problem
  • Previous by thread: Re: Re: Apply function to parts of a list
  • Next by thread: Re: Apply function to parts of a list