2010-07-09 39 views
11

Tôi đã cố gắng tìm các giá trị riêng của ma trận nhân với chuyển vị của nó nhưng tôi không thể làm điều đó bằng cách sử dụng numpy.Vấn đề nhân bản chuyển tiếp khó khăn

testmatrix = numpy.array([[1,2],[3,4],[5,6],[7,8]]) 
prod = testmatrix * testmatrix.T 
print eig(prod) 

tôi mong đợi để có được những kết quả sau đây cho sản phẩm:

5 11 17 23 
11 25 39 53 
17 39 61 83 
23 53 83 113 

và giá trị riêng:

0.0000 
0.0000 
0.3929 
203.6071 

Thay vào đó tôi đã ValueError: shape mismatch: objects cannot be broadcast to a single shape khi nhân testmatrix với chuyển vị của nó.

Tác phẩm này (phép nhân, không phải mã) trong MatLab nhưng tôi cần sử dụng nó trong ứng dụng python.

Ai đó có thể cho tôi biết tôi đang làm gì sai?

Trả lời

12

Bạn có thể tìm thấy điều này tutorial hữu ích vì bạn biết MATLAB.

Ngoài ra, hãy thử cách nhân testmatrix với dot() chức năng, ví dụ: numpy.dot(testmatrix,testmatrix.T)

Rõ ràng numpy.dot được sử dụng giữa các mảng cho phép nhân ma trận! Toán tử * dành cho phép nhân yếu tố (.* trong MATLAB).

+1

PEP 465 cho phép sử dụng toán tử trộn sẵn '@': 'mat1 @ mat2' – BallpointBen

2

Bạn đang sử dụng phép nhân số nguyên tố - toán tử * trên hai ma trận Numpy tương đương với toán tử .* trong Matlab. Sử dụng

prod = numpy.dot(testmatrix, testmatrix.T) 
Các vấn đề liên quan