MathGroup Archive 2008

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

Search the Archive

Re: Apply function to parts of a list

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


> 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},.=
> {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:


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


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


check that it did what you wanted:




  • 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