Как изменить значения идентификатора в массиве NumPy на массив NUMPY строки со словарем - PullRequest
0 голосов
/ 04 января 2019

Я работаю над сценарием, который преобразует идентификаторы названий школ в фактические названия школ, структурированные в виде массива.

Например

[[1,2,3],[3,6,7]]

становится

[[school-a,school-b,school-c],[school-c,school-f,school-g]

Школа и идентификаторы сидят вместе в словаре Python.

Я пытался сделать это:

for x in np.nditer(finalarray, op_flags=['readwrite']):
    x[...] = school_ids.get(int(x))
    print(school_ids.get(int(x)))
print(finalarray)

но это дало ошибку:

ValueError: invalid literal for int() with base 10: 'school-a'

важно, чтобы структура массива numpy оставалась прежней, потому что я также думал о том, чтобы просто перебрать каждый элемент, но затем структура будет потеряна.

Ответы [ 2 ]

0 голосов
/ 04 января 2019

предположим, у меня есть диктат:

dictt = {
    0: 'school-a',
    1: 'school-b',
    2: 'school-c',
    3: 'school-d',
    4: 'school-e',
    5: 'school-f',
    6: 'school-g',
    7: 'school-h',
    8: 'school-i'
}

_ids = np.array([[1,2,3],[3,6,7]])
school_ids = np.array(list(dictt.values()))
print school_ids[_ids-1]

есть:

[['school-a' 'school-b' 'school-c']
 ['school-c' 'school-f' 'school-g']]
0 голосов
/ 04 января 2019

Использование решения из этого поста :

x = np.array([[1,1,3], [2,2,2]])
d = {1: 'a', 2:'b', 3:'c'}
np.vectorize(d.get)(x)
>> array([['a', 'a', 'c'],
   ['b', 'b', 'b']], dtype=object)
...