Самый простой способ думать об этом - это то, что ваши буквы / слова являются индексами. Вы хотите преобразовать букву 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 со значениями, аналогичными описанным вами.