【问题标题】:building a pairwise matrix in scipy/numpy in Python from dictionaries从字典中在 Python 中的 scipy/numpy 中构建成对矩阵
【发布时间】:2011-02-21 03:45:04
【问题描述】:

我有一个字典,其键是字符串,值是 numpy 数组,例如:

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

我想计算“数据”中所有值对之间的统计数据,并构建一个 n x x 矩阵来存储结果。假设我知道键的顺序,即我有一个“标签”列表:

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

计算这个矩阵最有效的方法是什么?

我可以像这样计算所有对的统计数据:

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

但我希望结果是一个 n x n 矩阵,对应于“标签”和“标签”。我怎样才能将结果记录为这个矩阵? 谢谢。

【问题讨论】:

    标签: python numpy scipy


    【解决方案1】:

    您可以使用嵌套循环或列表推导式,例如:

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

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-06
        • 2013-11-11
        • 1970-01-01
        • 2011-08-30
        相关资源
        最近更新 更多