Re: Fourier: Execution time for real and complex arguments
- To: mathgroup at smc.vnet.net
- Subject: [mg31840] Re: Fourier: Execution time for real and complex arguments
- From: "Allan Hayes" <hay at haystack.demon.co.uk>
- Date: Fri, 7 Dec 2001 05:55:56 -0500 (EST)
- References: <9ul29u$6lr$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Silvia,
The difference seems to be due to packed array
n=2^15;
xRe=Table[Random[],{i,n}];
x1=xRe+I 1.;
x2=xRe+I Table[1.,{i,n}];
Developer`PackedArrayQ/@{xRe,x1,x2}
{True,True,False}
Now make thepacked array version of x2
px2=Developer`ToPackedArray[x2];//Timing
{0.49 Second,Null}
We get
Timing[y=Fourier[xRe];] (*Real argument*)
Timing[y=Fourier[x1];] (*Complex argument*)
Timing[y=Fourier[x2];] (*Complex argument*)
Timing[y=Fourier[px2];] (*Complex argument*)
{2.69 Second,Null}
{1.87 Second,Null}
{6.26 Second,Null}
{1.38 Second,Null}
So it seems to be advantageous to pack x2, even taking into account the time
taken to pack it.
--
Allan
---------------------
Allan Hayes
Mathematica Training and Consulting
Leicester UK
www.haystack.demon.co.uk
hay at haystack.demon.co.uk
Voice: +44 (0)116 271 4198
Fax: +44 (0)870 164 0565
"Silvia Raffaelli" <silviar at elmagn.chalmers.se> wrote in message
news:9ul29u$6lr$1 at smc.vnet.net...
> Hi,
>
> I am little curious about the behavior of the
> DFT-routine Fourier. Two quesions:
>
> 1. Why does Fourier take much more than twice the time
> to calculate the DFT of a list of imaginary/complex
> numbers compared to a equal-length list of real
> numbers (floating-point)?
>
> 2. Why does the way I generate a list affect the
> time it takes to run Fourier?
>
> Sample session:
>
> n = 2^20;
> xRe = Table[Random[],{i,n}];
> x1 = xRe+I 1.;
> x2 = xRe+I Table[1.,{i,n}];
>
> Timing[ y=Fourier[xRe]; ] (* Real argument *)
> Timing[ y=Fourier[x1]; ] (* Complex argument *)
> Timing[ y=Fourier[x2]; ] (* Complex argument *)
> Max[ Abs[x1 - x2] ]
> FullForm[x1] - FullForm[x2]
> Max[ Abs[ Fourier[x1] - Fourier[x2] ] ]
>
> Out[1]= {1.86 Second,Null}
>
> Out[2]= {4.24 Second,Null}
>
> Out[3]= {10.03 Second,Null}
>
> Out[4]= 0.
>
> Out[5]= 0
>
> Out[6]= 0.
>
>
> I can understand the difference between Out[1] and
> Out[2], but what about Out[3]? Any ideas?
> (Where's my mistake? ;-) )
>
> TIA,
>
> --
> Martin Johansson
> Ericsson Microwave Systems
> m.johansson at ericsson.com
>
>
>