У меня есть массив значений 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 способ задания элементов с учетом неупорядоченного ввода и соответствующего массива уникальных идентификаторов?