Normalizing A Vector

Lawrence D'Oliveiro ldo at geek-central.gen.new_zealand
Fri Jul 30 07:46:41 EDT 2010


Say a vector V is a tuple of 3 numbers, not all zero. You want to normalize 
it (scale all components by the same factor) so its magnitude is 1.
The usual way is something like this:
 L = math.sqrt(V[0] * V[0] + V[1] * V[1] + V[2] * V[2])
 V = (V[0] / L, V[1] / L, V[2] / L)
What I don’t like is having that intermediate variable L leftover after the 
computation. Here’s how to do it in one step:
 V = tuple \
 (
 x
 /
 math.sqrt
 (
 reduce(lambda a, b : a + b, (y * y for y in V), 0)
 )
 for x in V
 )
which, incidentally, also works for vectors with dimensions other than 3.


More information about the Python-list mailing list

AltStyle によって変換されたページ (->オリジナル) /