[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