2012-04-26 30 views
5

Tôi đang cố gắng nhân một véc-tơ (3 bởi 1) với chuyển vị của nó (1 đến 3). Tôi nhận được một mảng (3 bởi 3) nhưng tôi không thể có được nghịch đảo của nó. Bất kỳ ý tưởng tại sao?Vấn đề ma trận đơn số với 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 

Trả lời

21

Theo định nghĩa, bằng cách nhân một vector 1D với vị trí của nó, bạn đã tạo một ma trận đơn.

Mỗi hàng là tổ hợp tuyến tính của hàng đầu tiên.

Lưu ý rằng hàng thứ hai chỉ là 8x hàng đầu tiên.

Tương tự, hàng thứ ba là 50x hàng đầu tiên.

Chỉ có một hàng độc lập trong ma trận của bạn.

+0

Đó chỉ đơn giản là ngu ngốc của tôi..thanks for you help ... – Neerav

24

Ma trận bạn dán

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

Có một yếu tố quyết định của zero. Đây là định nghĩa của một ma trận Số ít (một mà một nghịch đảo không tồn tại)

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

-2

Sử dụng SVD hoặc QR-phân hủy để tính toán giải pháp chính xác trong lĩnh vực số thực hay phức tạp:

NumPy. linalg.svd numpy.linalg.qr

Các vấn đề liên quan