Соответствие элементов массива ключам словаря в Python - PullRequest
0 голосов
/ 28 июля 2011

Я пытаюсь сопоставить элементы в массиве с ключами словаря.Более конкретно, у меня есть словарь, ключи которого идентифицируют болезненное состояние (набор из 0 и 1) и возраст (0-100) (т. Е. ((0,1,1,0), 35) является ключом).Я хочу перебрать эти ключи и получить соответствующие значения, чтобы поместить их в определенные места в массиве.Массив, который у меня есть, структурирован так, что первые четыре столбца представляют болезненное состояние (0,1,1,0), а пятый столбец представляет возраст.Я хочу, чтобы шестой столбец был заполнен информацией из словаря с учетом соответствующего заболевания и возраста.Вот пример структуры:

# Inputs
dis_state_list = [(0,0,0,1), (0,1,0,1), (0,1, 0,1), (0,0,0,0)]
ages = np.array([5, 10, 15, 20])
sims = np.zeros([5, 6])
# Make dictionary
dis_age_dict = {}
for a in ages:
    for d in dis_state_list:
        dis_age_dict[tuple(d), a] = np.random.normal(loc = 0, scale = .1, size = 1) 

# Input sample values
sims[:, 4] = np.array([5, 10, 15, 15, 20])
sims [1,3] = 1
sims [2,1] = 1

Чтобы уточнить, я хочу заполнить последний столбец «sims» пунктами в словаре, основываясь на состоянии болезни и возрасте каждого сима.

1 Ответ

1 голос
/ 28 июля 2011

С

>>> sims
array([[  0.,   0.,   0.,   1.,   5.,   0.],
       [  0.,   1.,   0.,   1.,  10.,   0.],
       [  0.,   1.,   0.,   1.,  15.,   0.],
       [  0.,   0.,   0.,   0.,  20.,   0.]])

и

>>> d
{ ((0, 0, 0, 1), 5):  -1,
  ((0, 0, 0, 0), 20): -4,
  ((0, 1, 0, 1), 15): -3,
  ((0, 1, 0, 1), 10): -2 }

(не фактический формат отображения, просто укажите этот способ для более удобного просмотра)

Выполните следующие действия

for row in sims:
    key = (tuple(row[:4]), row[4])

    row[5] = d[key]

И тогда вы получите

>>> sims
array([[  0.,   0.,   0.,   1.,   5.,  -1.],
       [  0.,   1.,   0.,   1.,  10.,  -2.],
       [  0.,   1.,   0.,   1.,  15.,  -3.],
       [  0.,   0.,   0.,   0.,  20.,  -4.]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...