[Numpy-discussion] numpy.linalg.svd documentation
sturla at molden.no
Mon Jan 31 12:35:11 EST 2011
Den 30.01.2011 21:40, skrev Charles R Harris:
> Well, strictly speaking, both documentations say the same thing, but
> the old version was somewhat obfuscated. Either svd returns v.H and A
> = dot(u*d, v.H) or svd returns v and A = dot(u*d,v). I think the
> second is a clearer statement of the return value and the resulting
> factorization, but I suppose some may hold a different opinion.
I agree that it is a clearer statement, since there is a difference
between A = dot(u*d, v.H) and A = dot(u*d, vH), and we actually have
the latter. Still, the common definition of SVD is
u * s * v.H = x
u * s * v = x
This might be a bit confusing for those expecting the conjugate
transpose of v in the decomposition.
Be aware that Matlab's SVD is
[u,s,v] = svd(x)
so that u*s*v' = x.
Clearly Matlab and NumPy differ on the definition of v here, with Matlab
following the common convention. That is why I prefer the old notation
u, s, vH = np.linalg.svd(x)
v = vH.H
as it leaves no room for confusion.
As long as the behaviour of SVD has not changed, none of my SVD code
will break. That was what worried me most :-)
More information about the NumPy-Discussion