2010-05-18 45 views
0

建設SciPy的/ numpy的成對基質在Python我有一個詞典,其關鍵字是字符串和值numpy的陣列,例如:從字典

data = {'a': array([1,2,3]), 'b': array([4,5,6]), 'c': array([7,8,9])} 

我想計算在所有對值之間的統計'數據'並建立一個n x矩陣來存儲結果。假設我知道按鍵的順序,即我有「標籤」的列表:

labels = ['a', 'b', 'c'] 

什麼來計算這個矩陣的最有效方法是什麼?

我可以計算的統計像這一切對:

result = [] 
for elt1, elt2 in itertools.product(labels, labels): 
    result.append(compute_statistic(data[elt1], data[elt2])) 

但我想結果被N矩陣N,通過「標籤」所對應的「標籤」。我如何將結果記錄爲矩陣? 謝謝。

回答

2

你可以使用一個嵌套的循環,或列表的理解,如:

result = [[compute_stat(data[row], data[col]) for col in labels] 
      for row in labels] 
2

轉換結果列表到矩陣,然後調整形狀。

myMatrix = array(result) # or use matrix(result) 
myMatrix.shape = (len(labels), len(labels)) 

如果你想索引有標籤的矩陣,你可以做

myMatrix[labels.index('a'), labels.index('b')] 

這得到A * B值。如果這是你的意圖,最好將索引存儲在字典中。

labelsIndex = {'a' : 0, 'b' : 1, 'c' : 2 } 
myMatrix[labelsIndex['a'], labelsIndex['b']] 

希望這會有所幫助。