[Numpy-discussion] np.linalg.norm terrible behavior

Xavier Gnata xavier.gnata@gmail....
Sat Mar 5 17:27:31 CST 2011


Hi,

I got this problem in a real life code and it took me some time to 
figure out that np.linalg.norm has a terrible numerical behavior.
The problem is nicely described here 
http://fseoane.net/blog/2011/computing-the-vector-norm/

numpy/linalg/linalg.py claims to be a "high-level Python interface to 
the LAPACK library".
That's great but the low level norm function is coded in pure python :
     x = asarray(x)
     if ord is None: # check the default case first and handle it 
immediately
         return sqrt(add.reduce((x.conj() * x).ravel().real))

Is there a way to use *by default* the blas function to compute the norm?

ok....looks like sum as the same terrible numerical behavior
x=(np.array([1e4] + [1]*10000, dtype=np.float32))
np.sum(x*x)
returns 1e+08 instead of 1.0001e+08

Moreover, np.linalg.norm is slow compare to blas.

Is there a way/plan to fix it?

Xavier


More information about the NumPy-Discussion mailing list