Numpy -thoni c способ задания элементов при неупорядоченном вводе и соответствующих идентификаторах - PullRequest
0 голосов
/ 23 марта 2020

У меня есть массив значений a и массив уникальных идентификаторов ids такой же длины.

У меня тогда есть меньший массив значений v и соответствующий массив идентификаторов v_ids, которые должны перезаписывать значения a, где идентификаторы совпадают.

Маленький пример

Например:

a   = [0,1,2,4,4,2,0,0]
ids = [7,1,0,8,9,4,3,6] #unique ids
v = [-1,-2]
v_ids  = [4,8]

Я бы тогда изменил a дано v и v_ids для получения

a   = [0,1,2, -2, 4, -1,0,0] # I set values of `a` with values of `v` when ids == 4 and 8 

Неэффективное решение

Здесь следует не numpy -thoni c и очень медленный путь к решить эту проблему

def set_from_ids(a, ids, v, v_ids):
    result = np.array(a)
    for vid,value in zip(v_ids,v):
        index_of_vid_in_a = np.where(ids==vid)
        result[ index_of_vid_in_a ] = value
    return result


a   = np.array([0,1,2,4,4,2,0,0])
ids = np.array([7,1,0,8,9,4,3,6]) #unique ids
v = np.array([-1,-2])
v_ids  = np.array([4,8])

print(set_from_ids(a, ids, v, v_ids))

возвращает

[ 0  1  2 -2  4 -1  0  0]

предостережения при реализации numpythoni c solution

Обратите внимание, что массивы ids и v_ids не являются отсортировано, что затрудняет реализацию решения на основе масок.

Вопрос

Что такое numpy -thoni c способ задания элементов с учетом неупорядоченного ввода и соответствующего массива уникальных идентификаторов?

1 Ответ

2 голосов
/ 23 марта 2020

Я не уверен насчет производительности или эффективности, но вы можете просто составить карту идентификаторов со значениями как a, так и v. Затем обновить основную карту идентификаторов картой v_ids.

a   = [0,1,2,4,4,2,0,0]
ids = [7,1,0,8,9,4,3,6] #unique ids
v = [-1,-2]
v_ids  = [4,8]

id_map = dict(zip(ids, a))
v_map = dict(zip(v_ids, v))
id_map.update(v_map)
print(list(id_map.values()))

ВЫХОД

[0, 1, 2, -2, 4, -1, 0, 0]

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