[Numpy-discussion] Change in Python/Numpy numerics with Py version 2.6 ?

Robert Kern robert.kern@gmail....
Fri Nov 12 09:39:54 CST 2010

On Fri, Nov 12, 2010 at 09:02, Lou Pecora <lou_boog2000@yahoo.com> wrote:
> I ran across what seems to be a change in how numerics are handled in Python 2.6
> or Numpy 1.3.0 or both, I'm not sure.  I've recently switched from using Python
> 2.4 and Numpy 1.0.3 to using the Python 2.6 and Numpy 1.3.0 that comes with SAGE
> which is a large mathematical package.  But the issue seems to be a Python one,
> not a SAGE one.
> Here is a short example of code that gives the new behavior:
> # ---- Return the angle between two vectors ------------
> def get_angle(v1,v2):
>     '''v1 and v2 are 1 dimensional numpy arrays'''
>     # Make unit vectors out of v1 and v2
>     v1norm=sqrt(dot(v1,v1))
>     v2norm=sqrt(dot(v2,v2))
>     v1unit=v1/v1norm
>     v2unit=v2/v2norm
>     ang=acos(dot(v1unit,v2unit))
>     return ang
> When using Python 2.6 with Numpy 1.3.0 and v1 and v2 are parallel the dot
> product of v1unit and v2unit sometimes gives 1.0+epsilon where epsilon is the
> smallest step in the floating point numbers around 1.0 as given in the sys
> module. This causes acos to throw a Domain Exception. This does not happen when
> I use Python 2.4 with Numpy 1.0.3.

acos() is not a numpy function. It comes from the stdlib math module.
Python 2.6 tightened up many of the border cases for the math
functions. That is probably where the behavior difference comes from.

Robert Kern

"I have come to believe that the whole world is an enigma, a harmless
enigma that is made terrible by our own mad attempt to interpret it as
though it had an underlying truth."
  -- Umberto Eco

More information about the NumPy-Discussion mailing list