[SciPy-User] qr decompostion gives negative q, r ?

Alex Leach beamesleach at gmail.com
Tue Nov 20 20:30:55 EST 2012


On Wednesday 21 Nov 2012 01:36:08 Virgil Stokes wrote:
> 
> I have the following matrix, A:
> 
> array([[  7.07106781e+02,   5.49702852e-04,   1.66675481e-19],
>         [ -3.53553391e+01,   7.07104659e+01,   1.66675481e-19],
>         [  0.00000000e+00,  -3.97555166e+00,   7.07106781e-03],
>         [ -7.07106781e+02,  -6.48214647e-04,   1.66675481e-19],
>         [  3.53553391e+01,  -7.07104226e+01,   1.66675481e-19],
>         [  0.00000000e+00,   3.97560687e+00,  -7.07106781e-03],
>         [  0.00000000e+00,   0.00000000e+00,   0.00000000e+00],
>         [  0.00000000e+00,   0.00000000e+00,   0.00000000e+00],
>         [  0.00000000e+00,   0.00000000e+00,   0.00000000e+00]])
> 

> 
> Using np.linalg.qr(A) I get the following for R (3x3) which is
> "square-root" of the covariance matrix:
> 
> array([[ -1.00124922e+03,   4.99289918e+00,   0.00000000e+00],
>         [  0.00000000e+00,  -1.00033071e+02,   5.62045938e-04],
>         [  0.00000000e+00,   0.00000000e+00,  -9.98419272e-03]])
> 

I thought this would be down to the Lapack library you have linked against, as 
numpy uses Lapack's [zd]gqrf internally. I know Matlab comes distributed with 
Intel's MKL, so I imagine Matlab would use Intel's MKL routines internally.
Without knowing anything about the math, here are some test cases on Linux and 
Mac OS X. Looks like it's dependent on platform, from these results...

>>> a = np.array( ... )
>>> q, r = np.linalg.qr( a )
>>> r

**Linux**
Intel MKL:
array([[ -1.00124922e+03,   4.99289919e+00,   2.40741243e-35],
       [  0.00000000e+00,  -1.00033071e+02,   5.62045938e-04],
       [  0.00000000e+00,   0.00000000e+00,  -9.98419272e-03]])

ATLAS Lapack:
array([[ -1.00124922e+03,   4.99289919e+00,  -2.40741243e-35],
       [  0.00000000e+00,  -1.00033071e+02,   5.62045938e-04],
       [  0.00000000e+00,   0.00000000e+00,  -9.98419272e-03]])


**Mac OS X**:
Accelerate Framework:-
array([[  1.00124922e+03,  -4.99289919e+00,   2.40741243e-35],
       [  0.00000000e+00,   1.00033071e+02,  -5.62045938e-04],
       [  0.00000000e+00,   0.00000000e+00,   9.98419272e-03]])

ATLAS Lapack:-
array([[  1.00124922e+03,  -4.99289919e+00,   2.40741243e-35],
       [  0.00000000e+00,   1.00033071e+02,  -5.62045938e-04],
       [  0.00000000e+00,   0.00000000e+00,   9.98419272e-03]])

Cheers,
Alex
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.scipy.org/pipermail/scipy-user/attachments/20121121/1c5b4179/attachment.html>


More information about the SciPy-User mailing list