Normalizing A Vector

sturlamolden sturlamolden at yahoo.no
Tue Aug 3 04:37:46 CEST 2010


On 30 Jul, 13:46, Lawrence D'Oliveiro <l... at geek-
central.gen.new_zealand> wrote:

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

    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)
    del L

But this is the kind of programming tasks where NumPy is nice:

    V[:] = V / np.sqrt((V**2).sum())


Sturla





More information about the Python-list mailing list