如何有效地获取唯一值的索引列表?

如何有效地获取唯一值的索引列表?,第1张

概述是否有一个内置的方法可以帮助我有效地实现以下目标:给定一个数组,我需要一个数组列表,每个数组都有索引到数组的不同唯一值? 如果f是所需的函数, b = f(a) 和 u, idxs = unique(a) 然后 b[i] == where(idxs==i)[0] 我知道pandas.Series.groupby()可以做到这一点,但是当有超过10 ^ 5个唯一整数时创建一个dict可能效率不高. 是否有一个内置的方法可以帮助我有效地实现以下目标:给定一个数组,我需要一个数组列表,每个数组都有索引到数组的不同唯一值?

如果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)>>> aarray([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])]>>> unqarray([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]>>> aarray([0,1])>>> f_aarray([ 0,16,9,1])
总结

以上是内存溢出为你收集整理的如何有效地获取唯一值的索引列表?全部内容,希望文章能够帮你解决如何有效地获取唯一值的索引列表?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1193252.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-03
下一篇2022-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存