Преобразование словаря кортежей в матрицу numpy

У меня очень большой словарь, содержащий кортежи как ключи и их значения. Этот словарь должен представлять матрицу смежности с векторами совпадения слов, например, «работа» появляется с «опытом» 16 раз, а «работа» появляется с «услугами» 15 раз. Независимо от того, является ли это предпочтительным методом хранения, другая проблема (с огромным количеством данных, которые у меня есть, вложенные словари стали кошмаром для обхода), но это просто то, что у меня есть сейчас.

Frequency:{ ('work', 'experience'): 16, ('work', 'services'): 25, ('must', 'services'): 15, ('data', 'services'): 10, ... ...} 

Благодаря предыдущему сообщению, я смог сделать простую двоичную матрицу смежности с NetworkX, просто используя эту методологию:

 A=Frequency.keys() networkx.Graph(A) 

Этот результат был прекрасен тогда, но мой вопрос заключается в том, что мне нужно сделать, чтобы преобразовать частоту в матрицу смежности, используя значение ее совпадения в качестве значения в матрице, так что результат будет выглядеть примерно так, как показано в этой строке :

 array([[ 0., 16., 25., 0.], [ 16., 0., 1., 0.], [ 25., 1., 0., 1.], [ 10., 0., 0., 0.] ...) 

Я прошу прощения, если это похоже на предыдущие сообщения, но я просто не могу найти правильный способ преобразования этих кортежей в матрицу, которую я могу использовать в NetworkX. Я предполагаю, что я буду использовать numpy, но я не могу найти документацию для такого метода.

Заранее спасибо,

Рон

2 Solutions collect form web for “Преобразование словаря кортежей в матрицу numpy”

Этот ответ может быть полезен. С данными примера:

 >>> frequency = {('work', 'experience'): 16, ... ('work', 'services'): 25, ... ('must', 'services'): 15, ... ('data', 'services'): 10} >>> keys = np.array(frequency.keys()) >>> vals = np.array(frequency.values()) >>> keys array([['work', 'services'], ['must', 'services'], ['work', 'experience'], ['data', 'services']], dtype='|S10') >>> vals array([25, 15, 16, 10]) >>> unq_keys, key_idx = np.unique(keys, return_inverse=True) >>> key_idx = key_idx.reshape(-1, 2) >>> unq_keys array(['data', 'experience', 'must', 'services', 'work'], dtype='|S10') >>> key_idx array([[4, 3], [2, 3], [4, 1], [0, 3]]) >>> n = len(unq_keys) >>> adj = np.zeros((n, n) ,dtype=vals.dtype) >>> adj[key_idx[:,0], key_idx[: ,1]] = vals >>> adj array([[ 0, 0, 0, 10, 0], [ 0, 0, 0, 0, 0], [ 0, 0, 0, 15, 0], [ 0, 0, 0, 0, 0], [ 0, 16, 0, 25, 0]]) >>> adj += adj.T >>> adj array([[ 0, 0, 0, 10, 0], [ 0, 0, 0, 0, 16], [ 0, 0, 0, 15, 0], [10, 0, 15, 0, 25], [ 0, 16, 0, 25, 0]]) 

Вы можете создать словарь для сопоставления слов в кортежах с целыми числами, разбора кортежей в клавишах частоты, а затем создать массив numpy размера nxn, где n – общее количество слов, которые у вас есть, и, наконец, заполнить этот массив, используя Частота dict.

  • NumPy k-ый диагональный индекс
  • Процесс Python с использованием только 1,6 ГБ ОЗУ Ubuntu 32 бит в массиве Numpy
  • Преобразование массива numpy в список дат
  • pip не удалось установить код ошибки numpy 1
  • Целочисленный размер шага в scipy оптимизирует минимизацию
  • Загрузить CSV в Pandas MultiIndex DataFrame
  • numpy умножают матрицы сохраняют третью ось
  • Вставить элемент в массив numpy
  • Python - лучший язык программирования в мире.