On Sat, Sep 27, 2014 at 10:37 AM, Darlan Cavalcante Moreira < darc...@gmail.com> wrote:
> > Some time ago I have reported a bug about the linalg.matrix_rank in > numpy for complex matrices. This was quickly fixed and to take the > advantage of the fix I'm now using numpy 1.9.0 installed through pip, > instead of the version from my system (Ubuntu 14.04, with numpy version > 1.8.1). > > However, I have now encountered a very strange bug in the SVD function, > but only when numpy is manually installed (with pip in my case). When I > calculate the SVD of complex matrices with more columns than rows the > last rows of the returned V_H matrix are all equal to zeros. This does > not happens for all shapes, but for the ones where this happens it will > always happen. > > This can be reproduced with the code below. You can change the sizes of > M and N and it happens for other sizes where N > M, but now all of them. > > --8<---------------cut here---------------start------------->8--- > import numpy as np > > M = 8 # Number of rows > N = 12 # Number of columns > > # Calculate the SVD of a non-square complex random matrix > [U, S, V_H] = np.linalg.svd(np.random.randn(M, N) + 1j*np.random.randn(M, > N), full_matrices=True) > > # Calculate the norm of the submatrix formed by the last N-M rows > if np.linalg.norm(V_H[M-N:]) < 1e-30: > print("Bug!") > else: > print("No Bug") > # See the N-M rows. They are all equal to zeros > print(V_H[M-N:]) > --8<---------------cut here---------------end--------------->8--- > > The original matrix can still be obtained from the decomposition, since > the zero rows correspond to zero singular values due to the fact that > the original matrix has more columns then rows. However, since the user > asked for 'full_matrices' here (the default) returning all zeroes for > these extra rows is not useful. > > In order to isolate the bug I tried installing some different numpy > versions in different virtualenvs. I tried version 1.6, 1.7, 1.8.1 and > 1.9 and the bug appears in all of then. Since it does not happen if I > use the version 1.8.1 installed through the Ubuntu package manager, I > imagine it is due to some issue when pip compiles numpy locally. > > Note: If I run numpy.testing.test() all tests are OK for all numpy > versions I > have tested. The only fail is a known fail and I get "OK (KNOWNFAIL=1)". > > What does `np.__config__.show()` show? Chuck
_______________________________________________ NumPy-Discussion mailing list NumPy-Discussion@scipy.org http://mail.scipy.org/mailman/listinfo/numpy-discussion