2010-05-18 63 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']] 

希望这会有所帮助。