我正在尝试根据其中一列中的标识符字符串将一个recarray( in_arr
)中的值分配给另一个( )。out_arr
要正确分配值,其中的字符串id
必须匹配。
一些限制:
- 中的元素数量
in_arr
可以小于或大于中的数量out_arr
- 中的每个标识符
in_arr
都表示在中out_arr
,不一定相反 - 如果数字
in_arr
更大,条目将重复,并且可以分配其中任何一个 - 中的每个标识符
out_arr
都是唯一的 - 结果的元素顺序无关紧要
- 我宁愿不循环遍历每个元素;-)
这是一些代码:
my_dtype = [('id', 'S3'), ('val', int)]
in_arr = np.array([('xyz', 1), ('abc', 2), ('abc', 2)], dtype=my_dtype)
out_arr = np.array([('abc', 0), ('asd', 0), ('qwe', 0), ('xyz', 0), ('def', 0)], dtype=my_dtype)
msk_in, msk_out = ... # some magic
out_arr[msk_out]['val'] = in_arr[msk_in]['val'] # <-- other ways to assign also work for me...
out_arr
array([(b'abc', 2), (b'asd', 0), (b'qwe', 0), (b'xyz', 1), (b'def', 0)],
dtype=[('id', 'S3'), ('val', '<i8')])
最接近的,我来替换我的“魔法部分”是借用这个问题。但这只会给我正确的索引,而不是正确的顺序。
np.where(np.isin(out_arr['id'], in_arr['id']))[0]
array([0, 3])