Как сделать матрицу numpy из значений словаря кортежей? - PullRequest
2 голосов
/ 19 апреля 2020

У меня есть словарь с кортежами, состоящими из пар слов, и вероятностями в качестве значений, например d = {('a','b'): 0.5, ('b', 'c'): 0.5, ('a', 'd'): 0.25 ...} и т. Д., Где каждое слово в кортеже имеет пару с другим. Так, например, если всего 4 слова, длина словаря будет 16.

Я пытаюсь поместить значения в массив numpy в формате

///  a  b  c  d

a 

b 

c

d
* 1006. * Однако мне трудно это делать. Любая помощь будет оценена. Заранее спасибо!

1 Ответ

1 голос
/ 19 апреля 2020

Самый простой способ думать об этом - это то, что ваши буквы / слова являются индексами. Вы хотите преобразовать букву a в индекс 0 и букву b в индекс 1.

. Имея это в виду, простой способ сделать это - использовать index метод list. Например, если у нас есть список с уникальными значениями, такими как x = ['cat', 'dog', 'panda'], мы можем сделать x.index('dog'), чтобы получить индекс 1, где 'dog' встречается в списке x.

Имея это в виду давайте сгенерируем некоторые данные, аналогичные описанным вами:

import numpy as np

# I'm going to cheat a bit and use some numpy tricks to generate the data
x = np.random.random((5, 5))

values = ['alpha', 'beta', 'gamma', 'delta', 'epsilon']

your_data = {}
for (i, j), prob in np.ndenumerate(x):
    your_data[(values[i], values[j])] = prob

print(your_data)

Это дает что-то вроде:

{('alpha', 'beta'): 0.8066925762434737, ('alpha', 'gamma'): 0.7778280007471104, ...}

Пока что мы только что сгенерировали некоторые примеры данных. Теперь давайте сделаем обратное, чтобы решить вашу проблему:

values = ['alpha', 'beta', 'gamma', 'delta', 'epsilon']

output = np.zeros((len(values), len(values)), dtype=float)
for key in your_data:
    i = values.index(key[0])
    j = values.index(key[1])
    output[i, j] = your_data[key]

print(output)

Это даст нам массив numpy со значениями, аналогичными описанным вами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...