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