векторизовать массив из словаря с кортежем в качестве ключа - PullRequest
0 голосов
/ 08 апреля 2020

Это очень простая задача, но почему-то я не могу ее понять.

Допустим, у меня есть словарь

dictr = {(0,1,2): 0, (5,4,2):1} 

и массив:

A = [[0, 1, 2], [5, 4, 2]]

Я ищу, чтобы получить массив b = [0, 1]

Я думал, что мы могли бы сделать это:

B = np.vectorize(dictr.get)(A)

Однако, это не работает , Кто-нибудь знает почему?

Ответы [ 2 ]

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

Проблема в том, что dictr.get вызывается для элементов A, а не для строк A. Он вызывает dictr.get(A[0,0]), следующий dictr.get(A[0,1]) и так далее. Каждый из элементов A является скаляром, которого нет в словаре, поэтому np.vectorize откат до None. Вот почему вы получаете массив 2x3 None.

0 голосов
/ 08 апреля 2020

Это потому, что ваши ключи словаря кортеж , в то время как элементы в A список . Вы должны преобразовать все элементы внутри A в кортеж, чтобы ключ мог совпадать с

A python -i c (без numpy) может выглядеть так (учитывая, что каждый элемент в A соответствует ключу в диктр)

b = [dictr[tuple(item)] for item in A]
...