MathGroup Archive 2002

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

Search the Archive

RE: Re: Need faster way to combine arrays

  • To: mathgroup at smc.vnet.net
  • Subject: [mg36082] RE: [mg36064] Re: [mg36045] Need faster way to combine arrays
  • From: "DrBob" <majort at cox-internet.com>
  • Date: Wed, 21 Aug 2002 05:51:46 -0400 (EDT)
  • Reply-to: <drbob at bigfoot.com>
  • Sender: owner-wri-mathgroup at wolfram.com

I've timed the methods that work (several don't), and Sseziwa's solution
looks best by a considerable margin.  I would have expected t3 to be
fastest, because it's a single Mathematica function.

n = 1000;
{r, g, b} = Table[Table[Random[Integer], {n}, {n}], {3}];
Timing[t1 = Table[{r[[i, j]], g[[i, j]], b[[i, j]]}, {i,
       Length[r]}, {j, Length[r[[1]]]}];]
Timing[t2 = Transpose /@ Transpose[{r, g, b}];]
t1 == t2
Timing[t3 = Transpose[{r, g, b}, {3, 1, 2}];]
t1 == t3
Timing[t4 = Partition[Transpose[Flatten /@ {r, g, b}], n];]
t4 == t1

{1.7650000000000006*Second, Null}
{0.07800000000000118*Second, Null}
True
{0.264999999999997*Second, Null}
True
{0.015000000000000568*Second, Null}
True

Bobby

-----Original Message-----
From: Sseziwa Mukasa [mailto:mukasa at jeol.com] 
To: mathgroup at smc.vnet.net
Subject: [mg36082] [mg36064] Re: [mg36045] Need faster way to combine arrays


On Wednesday, August 14, 2002, at 05:35 AM, Kevin Gross wrote:

> Hello all,
>
> I've been using Mathematica for a while, but only recently for image
> processing.  Suppose I have the following 2D intensity arrays:
>
> r={{a1,b1},{c1,d1}};
> g={{a2,b2},{c2,d2}};
> b={{a3,b3},{c3,d3}};
>
> Now I'd like to combine them to produce a color image.
>
> color=Table[{r[[i,j]],g[[i,j]],b[[i,j]]},{i,2},{j,2}]
>
> This returns
>
> {{{a1, a2, a3}, {b1, b2, b3}}, {{c1, c2, c3}, {d1, d2, d3}}}
>
> which can be viewed as a color image with
>
> Graphics[Raster[color,ColorFunction->RGBColor]]//Show
>
> When the 2D arrays are large, combining them to form the color tensor
as
> above is very time consuming.  Surely there is a more efficient,
clever
> way to combine them than my use of Table, right?
>
> Many thanks,
>
> Kevin Gross
>
> PS Any comments pro/con from users of the Digital Image Processing
> package are also welcome.
>

I'm not a user of the Digital Image Processing package but I got the 
following results combining 3 1000x1000 arrays on a 1GHz Mac with 
version 4.2:

In[5]:=
n=1000;
{r,g,b}=Table[Table[Random[Integer],{n},{n}],{3}];

In[3]:=
Timing[Table[{r[[i,j]],g[[i,j]],b[[i,j]]},{i,Length[r]},{j,Length[r
[[1]]]}];]
Timing[Partition[Transpose[{Flatten[r],Flatten[g],Flatten[b]}],n];]

Out[3]=
{3.11 Second,Null}

Out[4]=
{0.2 Second,Null}

With n=10000 I run out of memory however.

Regards,

Ssezi






  • Prev by Date: Re: Reading Color Values from Images Using Mathematica
  • Next by Date: Course "Analog Circuit Design - Symbolic Modeling and Analysis Methods with Analog Insydes"
  • Previous by thread: Re: Need faster way to combine arrays
  • Next by thread: RE: Re: Need faster way to combine arrays