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
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.
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.
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
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With