Re: Functional programming puzzle

• To: mathgroup at christensen.cybernetics.net
• Subject: [mg1879] Re: Functional programming puzzle
• From: "Wm. Martin McClain" <wmm at chem.wayne.edu>
• Date: Sat, 12 Aug 1995 22:49:46 -0400
• Organization: Wayne State University, College of Science

Count Dracula <lk3a at kelvin.seas.virginia.edu> gave an elegant answer
my question:

> > I want a matrix of distances between the points in pts_List...

The Count's one-line solution depends upon an UNDOCUMENTED feature
of Outer, and also upon avoiding a named  (Dracula's method,
Here it is:

Dracula's method:
>RijMat[pts_List]:=Sqrt[Map[#.#&,Outer[Subtract,pts,pts,1],{2}]]

The undocumented feature of Outer is its FOURTH PARAMETER, a level
specification.  It would be interesting if the Count could divulge his
source of this information, apparently unavailable to mortals.

I created test lists of 5, 10, 20, 40, and 80 three-dimensional
Random points, with the following results (Dracula's method,
best observed times on a PowerMac 6100 with a speedup gadget):

{5 pts, 0.00 Sec},{10 pts,0.05 Sec},{20 pts,0.20 Sec},
{40 pts,0.80 Sec},{80 pts,3.20 Sec}}

Then I added the Outer level spec to my suggested method:

Rij[a_,b_]:=Sqrt[(a-b).(a-b)]
followed by
Outer[Rij,ptList,ptList,1]

My method, with its named external function Rij, took about twice as
long as Dracula's method.

Finally, I tried another method that uses
LinearAlgebra`MatrixManipulation`UpperDiagonalMatrix
to cut down on the number of multiplies.  It took about the same
time as Rij method, but saved a little on space.

Question for WRI people:  The matrix of distances is a vital
step in many stat mech calculations, and making it faster would
be a great service.  Could you make a special kind "Outer", or perhaps
just an option for Outer, say Output->UpperTriangular, that would
avoid calculating the redundant lower triangle of results
(as well as the zeroes on the diagonal) ?

• Prev by Date: MS-DOS Version
• Next by Date: Re: Speeding up a numerical integrator
• Previous by thread: Re: Functional programming puzzle
• Next by thread: [Q] weighted regression with Regress