MathGroup Archive 2003

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

Search the Archive

Re: Re: Minimization

  • To: mathgroup at smc.vnet.net
  • Subject: [mg42293] Re: [mg42275] Re: Minimization
  • From: Selwyn Hollis <selwynh at earthlink.net>
  • Date: Fri, 27 Jun 2003 06:31:21 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

That's beautiful!

This is nice case study. Since Carl Woll and I were using essentially 
the same approach, let's see what happens as my clumsy code morphs into 
Carl's elegant code.

pts = Table[{Random[],Random[],Random[]}, {10000}];
p0= {0,1,0};

Here's my first version:

Timing[ With[{dists = (#.#)^(1/2)& /@ ((#-target &) /@ pts)},
    pts[[Flatten[Position[dists,#]& /@ Sort[dists][[Range[5]]] ] ]] ] ]

   {0.28 Second, Null}

Next a cleaner version:

Timing[ With[{sqdists = (# - p0).(# - p0) & /@ pts},
    pts[[Flatten[Position[sqdists,#]& /@ Sort[sqdists][[Range[5]]] ] ]] 
]]

   {0.17 Second, Null}

Now using Carl's clever Plus@@((Transpose[pts]-p0)^2):

Timing[ With[{sqdists = Plus @@ ((Transpose[pts] - p0)^2)},
     pts[[Flatten[Position[sqdists,#]& /@ Sort[sqdists][[Range[5]]] ] ]] 
]]

   {0.09 Second, Null}

Finally, if I use Ordering, the two become equivalent:

Timing[ With[{sqdists = Plus @@ ((Transpose[pts] - p0)^2)},
          pts[[Ordering[sqdists, 5]]] ] ]

   {0.03 Second, Null}

-----
Selwyn Hollis
http://www.math.armstrong.edu/faculty/hollis

On Thursday, June 26, 2003, at 05:36  AM, Carl K. Woll wrote:

> John,
>
> Here is a version which is a bit faster on my machine than Hartmut's, 
> where
> I use pts instead of l1.
>
> pts[[Ordering[Plus@@((Transpose[pts]-p0)^2),5]]]
>
> The improvement in speed comes from using
>
> Plus@@((Transpose[pts]-p0)^2)
>
> instead of Hartmut's
>
> With[{r=#-p0},r.r]&/@pts
>
> Further improvements in speed may be achievable if you use Compile.
>
> Carl Woll
> Physics Dept
> U of Washington
>
> <Moranresearch at aol.com> wrote in message 
> news:bdbeu1$2dq$1 at smc.vnet.net...
>>
>> I have a list of points l1= (xi,yi, zi) and a target point (x0,y0,z0) 
>> how
>> would I efficiently find the 5 points in l1 closest to, ie with the
> smallest
>> Euclidian disance to, the target point? Thank you.
>> John
>>
>
>
>


  • Prev by Date: Re: Re: format Text in graphics
  • Next by Date: Re: Re: format Text in graphics
  • Previous by thread: Re: Minimization
  • Next by thread: Re: Re: Re: Minimization