2014-02-21 18 views
3

我至今是:排序值

dict={'A':[1,2,3], 'B':[2,5,4], 'C':[2,1,8]} 
N=len(keys) 
m=numpy.zeros(N,N) 
for i in range(N): 
    for j in range(N): 
     m[i-1,j-1]=covariance(values[i-1],values[j-1]) 
     m[j-1,i-1]=covariance(values[j-1],values[i-1]) 
m=numpy.triu(m) 

這給了我:

1 0.639 0.07 
0  1 0.51 
0  0  1 

我沒有列名或行名稱呢。我想是這樣的:

 A  B  C 
A  1 0.639 0.07 
B  0  1 0.51 
C  0  0  1 

鑑於這種矩陣,我想它由矩陣的值降序排列,所以我想輸出是:

A & A: 1 
B & B: 1 
C & C: 1 
A & B: 0.639 
B & C: 0.51 
A & C: 0.07 
B & A: 0 #etc 

從輸出想要將其保存到一個csv文件,其中第一列是名稱,第二列是相應的分數

感謝您的閱讀。

+2

你需要證明你有你問一個問題之前做了什麼。如果你不知道從哪裏開始,那麼這裏有一個提示:將數據讀入一個字典中,使用'A&A'等作爲鍵,然後使用'key'參數對'sorted()'函數進行排序。 – ssm

+0

編輯我到目前爲止 – user3334418

回答

2

呼叫np.sort設置爲Noneaxis關鍵字參數,然後用切片扭轉這種局面:

>>> a = np.array([[1, 0.639, 0.07], [0, 1, 0.51], [0, 0, 1]]) 
>>> a 
array([[ 1. , 0.639, 0.07 ], 
     [ 0. , 1. , 0.51 ], 
     [ 0. , 0. , 1. ]]) 
>>> np.sort(a, axis=None)[::-1] 
array([ 1. , 1. , 1. , 0.639, 0.51 , 0.07 , 0. , 0. , 0. ]) 

如果你想知道每個值是從,然後先用np.argsort到來,然後解開扁平指數:

>>> idx = np.argsort(a, axis=None)[::-1] 
>>> rows, cols = np.unravel_index(idx, a.shape) 
>>> a_sorted = a[rows, cols] 
>>> for r, c, v in zip(rows, cols, a_sorted): 
...  print 'ABC'[r], '&', 'ABC'[c], ':', v 
... 
C & C : 1.0 
B & B : 1.0 
A & A : 1.0 
A & B : 0.639 
B & C : 0.51 
A & C : 0.07 
C & B : 0.0 
C & A : 0.0 
B & A : 0.0 
+0

真棒。我將如何解決0.51對應於「B&C」的事實? – user3334418

+0

他想要他提供的輸出。 :) –

1

從numpy的陣列開始,像這樣:

matrix = numpy.array([ [ 1, 0.639, 0.07 ], 
         [ 0, 1,  0.51 ], 
         [ 0, 0,  1 ] ]) 

,你可以這樣做:

indices = ["A", "B", "C", ]      

values = [] 

for r,row in enumerate(matrix): 
    for c, cell in enumerate(row): 
     values.append(("{} & {}".format(indices[r], indices[c]), cell)) 

values.sort(key=lambda it: (-it[1], it[0])) 

for k,v in values: 
    print "{}: {}".format(k,v) 

OUTPUT:

A & A: 1.0 
B & B: 1.0 
C & C: 1.0 
A & B: 0.639 
B & C: 0.51 
A & C: 0.07 
B & A: 0.0 
C & A: 0.0 
C & B: 0.0 
+0

接收到一個錯誤:對於k,v值: ValueError:太多的值來解壓 – user3334418

+0

我將如何去輸出並將其保存到csv文件 – user3334418

+0

@ user3334418 [csv模塊文檔](http:///docs.python.org/2/library/csv.html)和[代碼](http://pastebin.com/fHkzHEX9)。 – kelvinss