2012-04-26 24 views
5

Próbuję pomnożyć wektor (3 na 1) przez jego transpozycję (1 na 3). Dostaję tablicę (3 na 3), ale nie mogę jej odwrócić. Każdy pomysł, dlaczego?Problem macierzy osobliwej z Numpy

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 

Odpowiedz

21

Z definicji, poprzez pomnożenie wektora 1D przez jego transpozycję, utworzyłeś pojedynczą macierz.

Każdy wiersz jest liniową kombinacją pierwszego rzędu.

Zauważ, że drugi rząd to tylko 8x w pierwszym rzędzie.

Podobnie, trzeci rząd to 50x w pierwszym rzędzie.

W macierzy znajduje się tylko jeden niezależny rząd.

+0

To było po prostu głupie ode mnie .. dzięki za pomoc ... – Neerav

-2

Zastosowanie SVD lub QR rozkładu obliczyć dokładne rozwiązanie w pamięci rzeczywistej lub złożone pola ilość:

numpy. linalg.svd numpy.linalg.qr

Powiązane problemy