Actually, it makes more sense to change B = safe_sparse_dot(Q.T, M)
To B = safe_sparse_dot(Q.T.conj(), M) On 10 August 2017 at 16:56, André Melo <andre.nascimento.m...@gmail.com> wrote: > 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.gri...@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@python.org >> https://mail.python.org/mailman/listinfo/scikit-learn >> _______________________________________________ scikit-learn mailing list scikit-learn@python.org https://mail.python.org/mailman/listinfo/scikit-learn