MathGroup Archive 2008

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

Search the Archive

[functional approach should give] an even faster way to normalize a

  • To: mathgroup at smc.vnet.net
  • Subject: [mg85648] [functional approach should give] an even faster way to normalize a
  • From: congruentialuminaire at yahoo.com
  • Date: Sun, 17 Feb 2008 07:20:54 -0500 (EST)

Hello UG:

I have a 512x512 array of 3-tuples. I want to make any tuple with a
value outside of 0 <--> 1, become {0.,0.,0.}.

The first version has this loop:

For[i = 1, i <= graphSize, i++,
  For[j = 1, j <= graphSize, j++,
   If[((sum[[i, j, 1]] < 0) || (sum[[i, j, 1]] > 1) ||
      (sum[[i, j, 2]] < 0) || (sum[[i, j, 2]] > 1) ||
      (sum[[i, j, 3]] < 0) || (sum[[i, j, 3]] > 1)),
    sum[[i, j]] = {0., 0., 0.}
    ]
   ]
  ];

After scratching my head for a while I came up with this (equivalent)
Map statement.

sum = Map[
   If[#[[1]] < 0 || #[[1]] > 1 || #[[2]] < 0 || #[[2]] > 1 || #[[3]] <
        0 || #[[3]] > 1, {0., 0., 0.}, #] &, sum, {2}];

It is faster but only by about 15%.

It is unreasonable to believe some other construction can accomplish
this with a bigger payoff?

Thanks in advance.

Regards..Roger W.


  • Prev by Date: Re: Garbage collection and mutable data structures
  • Next by Date: Re: rendering problem
  • Previous by thread: Re: Question: Embed mathematica 3d in pdf?
  • Next by thread: Re: [functional approach should give] an even faster way