2013-05-08 57 views
7
 iluropoda_melanoleuca bos_taurus callithrix_jacchus canis_familiaris 
ailuropoda_melanoleuca  0  84.6    97.4    44 
bos_taurus     0   0    97.4    84.6 
callithrix_jacchus   0   0     0    97.4 
canis_familiaris   0   0     0     0 

Đây là phiên bản ngắn của ma trận python mà tôi có. Tôi có thông tin trong tam giác phía trên. Có một chức năng dễ dàng để sao chép các tam giác trên xuống tam giác xuống của ma trận?Sao chép tam giác trên xuống tam giác dưới trong ma trận python

Trả lời

3

Nếu tôi hiểu câu hỏi một cách chính xác, tôi tin rằng điều này sẽ làm việc

for i in range(num_rows): 
    for j in range(i, num_cols): 
     matrix[j][i] = matrix[i][j] 
+0

Cảm ơn !. Tôi cảm thấy như một thằng ngốc, tôi có thể cần một ít cà phê ... – biojl

+4

Bạn không phải là kẻ ngốc, cách tiếp cận này có thể chậm – Eric

14

Để làm điều này trong NumPy, mà không sử dụng một vòng lặp kép, bạn có thể sử dụng tril_indices.

>>> i_lower = np.tril_indices(n, -1) 
>>> matrix[i_lower] = matrix.T[i_lower] # make the matrix symmetric 

Hãy cẩn thận rằng bạn không nên cố gắng để trộn tril_indicestriu_indices như cả hai đều sử dụng hàng lập chỉ mục lớn, ví dụ, điều này không làm việc:

>>> i_upper = np.triu_indices(n, 1) 
>>> i_lower = np.tril_indices(n, -1) 
>>> matrix[i_lower] = matrix[i_upper] # make the matrix symmetric 
>>> np.allclose(dist.T, dist) 
False 
Các vấn đề liên quan