Arrays 用另一个数组/列表的索引替换一个数组/列表中的值

Arrays 用另一个数组/列表的索引替换一个数组/列表中的值,arrays,indexing,replace,Arrays,Indexing,Replace,我有一个看似简单的问题,如果不做一个循环,我似乎无法解决它。(我处理的是非常大的阵列) 为了简单起见,假设我有一个排序数组和一个不同维度的未排序数组,例如: x=np.数组([511512513]),并且 y=np.数组([512513511511])。 我想要一个快速函数,用排序的最小到最大数组x中给定的索引位置替换y。 答案应该是output=np.array([1,1,2,0,0]) 我希望能够在一两个步骤中做到这一点。任何帮助都将不胜感激,谢谢正是您想要的: import numpy a

我有一个看似简单的问题,如果不做一个循环,我似乎无法解决它。(我处理的是非常大的阵列)

为了简单起见,假设我有一个排序数组和一个不同维度的未排序数组,例如: x=np.数组([511512513]),并且 y=np.数组([512513511511])。 我想要一个快速函数,用排序的最小到最大数组x中给定的索引位置替换y。 答案应该是output=np.array([1,1,2,0,0])

我希望能够在一两个步骤中做到这一点。任何帮助都将不胜感激,谢谢

正是您想要的:

import numpy as np

x=np.array([511,512,513])
y=np.array([512,512,513,511,511])
np.searchsorted(x, y) #  array([1, 1, 2, 0, 0])

转换排序数组,使索引为值,值为位置(hashmap?)。i、 e.
[511=>0,512=>1,513=>2]
当您按键在“排序数组”中查找时,从未排序数组中进行的查找会很快。谢谢您的帮助。这就是我使用的:dictionary=dict(zip(x,z)),其中z是索引数组[0,1,2]。然后是列表理解l=[i]对于未排序列表中的i]。非常快。