如何有效地获取唯一值的索引列表?
发布时间:2020-12-20 11:39:23 所属栏目:Python 来源:网络整理
导读:是否有一个内置的方法可以帮助我有效地实现以下目标:给定一个数组,我需要一个数组列表,每个数组都有索引到数组的不同唯一值? 如果f是所需的函数, b = f(a) 和 u,idxs = unique(a) 然后 b[i] == where(idxs==i)[0] 我知道pandas.Series.groupby()可以做到这
是否有一个内置的方法可以帮助我有效地实现以下目标:给定一个数组,我需要一个数组列表,每个数组都有索引到数组的不同唯一值?
如果f是所需的函数, b = f(a) 和 u,idxs = unique(a) 然后 b[i] == where(idxs==i)[0] 我知道pandas.Series.groupby()可以做到这一点,但是当有超过10 ^ 5个唯一整数时创建一个dict可能效率不高. 解决方法
如果你有numpy> = 1.9你可以这样做:
>>> a = np.random.randint(5,size=10) >>> a array([0,2,4,3,1]) >>> unq,unq_inv,unq_cnt = np.unique(a,return_inverse=True,return_counts=True) >>> np.split(np.argsort(unq_inv),np.cumsum(unq_cnt[:-1])) [array([0]),array([9]),array([1,8]),array([7]),array([2,5,6])] >>> unq array([0,1,4]) 在早期版本中,您可以获得额外的计数: >>> unq_cnt = np.bincount(unq_inv) 此外,如果您想确保对每个值的索引进行排序,我认为您需要使用稳定排序,例如np.argsort(unq_inv,kind =’mergesort’) 考虑到你的目标,我认为最大限度地减少对昂贵功能的要求,我认为你不需要做你想要的.假设你的功能是平方的,你可以简单地做: >>> unq,unq_inv = np.unique(a,return_inverse=True) >>> f_unq = unq**2 >>> f_a = f_unq[unq_inv] >>> a array([0,1]) >>> f_a array([ 0,16,9,1]) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |