построение попарной матрицы в Scipy / Numpy в Python из словарей - PullRequest
0 голосов
/ 19 мая 2010

У меня есть словарь, ключи которого являются строками, а значения - массивами, например ::

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

Я хочу вычислить статистику между всеми парами значений в 'data' и построить матрицу 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 ]

2 голосов
/ 19 мая 2010

Преобразуйте список результатов в матрицу, а затем отрегулируйте форму.

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

Если вы хотите проиндексировать матрицу с метками, которые вы могли бы сделать

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

Получитсязначение * b.Если это ваше намерение, лучше хранить индексы в словаре.

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

Надеюсь, это поможет.

2 голосов
/ 19 мая 2010

Вы можете использовать вложенный цикл или представление списка, например:

result = [[compute_stat(data[row], data[col]) for col in labels]
          for row in labels]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...