2013-06-30 42 views
7

Tôi tạo ra một ma trận hình tam giác thấp hơn, và tôi muốn hoàn thành ma trận bằng cách sử dụng các giá trị trong ma trận tam giác dưới để tạo thành một ma trận vuông, đối xứng xung quanh các số không đường chéo.Python - Làm thế nào tôi có thể tìm thấy ma trận vuông của ma trận khối u hình tam giác thấp hơn? (với một tam giác trên đối xứng)

lower_triangle = numpy.array([ 
[0,0,0,0], 
[1,0,0,0], 
[2,3,0,0], 
[4,5,6,0]]) 

Tôi muốn tạo ra ma trận hoàn chỉnh sau, duy trì đường chéo zero:

complete_matrix = numpy.array([ 
[0, 1, 2, 4], 
[1, 0, 3, 5], 
[2, 3, 0, 6], 
[4, 5, 6, 0]]) 

Cảm ơn.

Trả lời

9

Bạn chỉ có thể thêm nó vào chuyển vị của nó:

>>> m 
array([[0, 0, 0, 0], 
     [1, 0, 0, 0], 
     [2, 3, 0, 0], 
     [4, 5, 6, 0]]) 
>>> m + m.T 
array([[0, 1, 2, 4], 
     [1, 0, 3, 5], 
     [2, 3, 0, 6], 
     [4, 5, 6, 0]]) 
7

Bạn có thể sử dụng numpy.triu_indices hoặc numpy.tril_indices:

>>> a=np.array([[0, 0, 0, 0], 
...    [1, 0, 0, 0], 
...    [2, 3, 0, 0], 
...    [4, 5, 6, 0]]) 
>>> irows,icols = np.triu_indices(len(a),1) 
>>> a[irows,icols]=a[icols,irows] 
>>> a 
array([[0, 1, 2, 4], 
     [1, 0, 3, 5], 
     [2, 3, 0, 6], 
     [4, 5, 6, 0]]) 
+0

@DSM tôi đã sửa chữa câu trả lời ban đầu của tôi và bây giờ có được sự đối xứng trong mảng của tôi – rtrwalker

+0

Đây là câu trả lời hay hơn so với DSM vì nó không dựa vào các phần tử đường chéo bằng 0. –

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