MathGroup Archive 2003

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

Search the Archive

Re: Re: Re: Minimization

  • To: mathgroup at smc.vnet.net
  • Subject: [mg42314] Re: [mg42293] Re: [mg42275] Re: Minimization
  • From: Selwyn Hollis <selwynh at earthlink.net>
  • Date: Sat, 28 Jun 2003 03:22:00 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

Doh! That's a typo. It should be p0.


On Friday, June 27, 2003, at 11:40  AM, Bobby Treat wrote:

> Selwyn,
>
> Your first version doesn't define 'target'.
>
> Bobby
>
> -----Original Message-----
> From: Selwyn Hollis <selwynh at earthlink.net>
To: mathgroup at smc.vnet.net
> To: mathgroup at smc.vnet.net
> Sent: Fri, 27 Jun 2003 06:31:21 -0400 (EDT)
> Subject: [mg42314] [mg42293] Re: [mg42275] Re: Minimization
>
> 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: Re: Minimization
  • Next by Date: Re: Re: Re: format Text in graphics
  • Previous by thread: Re: Re: Re: Minimization
  • Next by thread: Re: 3D Data approximation