
如果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])总结
以上是内存溢出为你收集整理的如何有效地获取唯一值的索引列表?全部内容,希望文章能够帮你解决如何有效地获取唯一值的索引列表?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)