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
>>>
>>
>>
>>
>