Python Numpy thonic方法,用于设置给定未排序输入和相应ID的元素

Python Numpy thonic方法,用于设置给定未排序输入和相应ID的元素,python,arrays,numpy,Python,Arrays,Numpy,我有一个值数组a,还有一个与a长度相同的唯一id数组id 然后我有一个较小的值数组v和一个相应的id数组v_id,它们必须覆盖id匹配的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_id,以获得 a = [0,1,2, -2, 4, -1,0,0] # I set values of `a` with value

我有一个值数组
a
,还有一个与a长度相同的唯一id数组
id

然后我有一个较小的值数组
v
和一个相应的id数组
v_id
,它们必须覆盖id匹配的
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_id
,以获得

a   = [0,1,2, -2, 4, -1,0,0] # I set values of `a` with values of `v` when ids == 4 and 8 
无效解决方案 下面是一个非numpythonic且非常缓慢的方法来解决这个问题

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]
实施numpythonic解决方案时的注意事项 请注意,
id
v_id
数组都没有排序,这使得基于掩码的解决方案很难实现

问题:
在给定未排序的输入和相应的唯一ID数组的情况下,设置元素的numpy thonic方法是什么?

我不确定性能或效率,但您可以将ID映射到a和v的值。然后用v_id映射更新主id映射

a=[0,1,2,4,4,2,0,0]
ids=[7,1,0,8,9,4,3,6]#唯一ID
v=[-1,-2]
v_id=[4,8]
id_map=dict(zip(id,a))
v_map=dict(zip(v_id,v))
id_映射。更新(v_映射)
打印(列表(id\u map.values())
输出


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

我不确定性能或效率,但您可以将ID映射到a和v的值。然后用v_id映射更新主id映射

a=[0,1,2,4,4,2,0,0]
ids=[7,1,0,8,9,4,3,6]#唯一ID
v=[-1,-2]
v_id=[4,8]
id_map=dict(zip(id,a))
v_map=dict(zip(v_id,v))
id_映射。更新(v_映射)
打印(列表(id\u map.values())
输出


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

v\u ID中的ID是否保证存在于ID中?或者它们可能不存在吗?是的,它们总是存在于@ChrisDoyleAre,而v_ID中的ID保证存在于ids中?或者它们可能不存在?是的,它们总是存在@ChrisDoyle