[Numpy-discussion] Zero row in SVD's unitary matrix on some Mac's
Jason Grout
jason-sage at creativetrax.com
Tue Apr 26 12:36:19 EDT 2011
On 4/26/11 11:22 AM, Jason Grout wrote:
> On 4/26/11 11:12 AM, Jason Grout wrote:
>> On 4/26/11 11:07 AM, Jason Grout wrote:
>>> And indeed, I get a 0 row as the last row of the V**H matrix
>>
>> I just double-checked things one last time and saw that I actually
>> hadn't changed the first argument of zgesdd to "A" in the program that I
>> actually ran. So with this change, I get a nonzero last row of the V**H
>> matrix from the C call to zgesdd. So everything is consistent between
>> the C call to zgesdd and the numpy svd call.
>>
>> So now my remaining question is: if the Lapack docs only say that V**H
>> is the full n-by-n matrix if M>=N, why is numpy returning it even if M<N?
>
> One more post talking to myself...
>
> I notice that the zgesvd routine docs guarantee that the V returned is
> unitary, regardless of the size of A. So this might be another argument
> for calling zgesvd instead of zgesdd.
Okay, just one more data point. Our people that are seeing the problem
with numpy returning a non-unitary V also see a non-unitary V being
returned by the test C call to zgesdd. In other words, it really
appears that zgesdd follows the Lapack docs, and if rows<columns, the
returned V is not necessarily unitary, but may contain a zero row. This
makes numpy's assumptions in using zgesdd false.
You can see this report at
http://trac.sagemath.org/sage_trac/ticket/11248#comment:25
Thanks,
Jason
More information about the NumPy-Discussion
mailing list