[scikit-learn] Truncated svd not working for complex matrices

André Melo andre.nascimento.melo at gmail.com
Thu Aug 10 10:56:43 EDT 2017

Hi Olivier,

Thank you very much for your reply. I was convinced it couldn't be a
fundamental mathematical issue because the singular values were coming
out exactly right, so it had to be a problem with the way complex
values were being handled.

I decided to look at the source code and it turns out the problem is
when the following transformation is applied:

U = np.dot(Q, Uhat)

Replacing this by

U = np.dot(Q.conj(), Uhat)

solves the issue! Should I report this on github?

On 10 August 2017 at 16:13, Olivier Grisel <olivier.grisel at ensta.org> wrote:
> I have no idea whether the randomized SVD method is supposed to work for
> complex data or not (from a mathematical point of view). I think that all
> scikit-learn estimators assume real data (or integer data for class labels)
> and our input validation utilities will cast numeric values to float64 by
> default. This might be the cause of your problem. Have a look at the source
> code to confirm. The reference to the paper can also be found in the
> docstring of those functions.
> --
> Olivier
> _______________________________________________
> scikit-learn mailing list
> scikit-learn at python.org
> https://mail.python.org/mailman/listinfo/scikit-learn

More information about the scikit-learn mailing list