[Numpy-discussion] Strange bug in SVD when numpy is installed with pip
Darlan Cavalcante Moreira
darcamo at gmail.com
Sat Sep 27 15:46:10 EDT 2014
With so many "NOT AVAILABLE" I'm now surprised SVD is even defined.
Charles R Harris writes:
> On Sat, Sep 27, 2014 at 10:37 AM, Darlan Cavalcante Moreira <
> darcamo at 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
>> 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("No Bug")
>> # See the N-M rows. They are all equal to zeros
>> --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?
> NumPy-Discussion mailing list
> NumPy-Discussion at scipy.org
Sent with my mu4e
More information about the NumPy-Discussion