2013-05-08 20 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 

これは私が持っている短い行列です。私は上の三角形の情報を持っています。上三角を行列の下三角にコピーする簡単な関数はありますか?私が正しく質問を理解していればpython行列の上三角形から下三角形にコピー

答えて

3

、私は、これは二重のループを使用せずに、

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

感謝を!私は馬鹿のように感じ、私はいくつかのコーヒーが必要かもしれない... – biojl

+4

あなたは馬鹿ではない、アプローチのこの種は遅くなることができます – Eric

14

がnumpyの中でこれを行うために働くだろうと信じて、あなたはtril_indicesを使用することができます。

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

は、あなたが彼らの両方を使用する行の主要なインデックスとしてtril_indicestriu_indicesをミックスしようとしないように注意してください、すなわち、これは動作しません:

>>> 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