Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Singular matrix issue with Numpy

I am trying to multiply a vector(3 by 1) by its transpose(1 by 3). I get a (3 by 3) array but I cannot get its inverse. Any idea why?

import numpy as np  c=array([1, 8, 50]) np.transpose(c[np.newaxis]) * c array([[   1,    8,   50],    [   8,   64,  400],    [  50,  400, 2500]]) np.linalg.inv(np.transpose(c[np.newaxis]) * c) Traceback (most recent call last):   File "<console>", line 1, in <module>   File "C:\Python26\lib\site-packages\numpy\linalg\linalg.py", line 445, in inv     return wrap(solve(a, identity(a.shape[0], dtype=a.dtype)))   File "C:\Python26\lib\site-packages\numpy\linalg\linalg.py", line 328, in solve     raise LinAlgError, 'Singular matrix' LinAlgError: Singular matrix 
like image 741
Neerav Avatar asked Apr 26 '12 01:04

Neerav


People also ask

What does singular matrix error mean?

A singular matrix error occurs when the circuit does not have a unique and finite solution. For example, a circuit containing a floating capacitor does not have a unique DC solution as the capacitor can be at any voltage.

Is NumPy matrix deprecated?

tl; dr: the numpy. matrix class is getting deprecated. There are some high-profile libraries that depend on the class as a dependency (the largest one being scipy.


2 Answers

The matrix you pasted

[[   1,    8,   50],  [   8,   64,  400],  [  50,  400, 2500]] 

Has a determinant of zero. This is the definition of a Singular matrix (one for which an inverse does not exist)

http://en.wikipedia.org/wiki/Invertible_matrix

like image 98
kaveman Avatar answered Sep 30 '22 01:09

kaveman


By definition, by multiplying a 1D vector by its transpose, you've created a singular matrix.

Each row is a linear combination of the first row.

Notice that the second row is just 8x the first row.

Likewise, the third row is 50x the first row.

There's only one independent row in your matrix.

like image 37
Joe Kington Avatar answered Sep 30 '22 02:09

Joe Kington