【问题标题】:numpy.unique sort based on countsnumpy.unique 基于计数的排序
【发布时间】:2018-07-24 21:23:59
【问题描述】:

如果return_countsTruenumpy.unique 函数允许返回唯一元素的计数。现在返回的元组由两个数组组成,一个包含唯一元素,第二个包含计数数组,两者都按唯一元素排序。现在有没有办法根据计数数组而不是唯一元素进行排序?我的意思是我知道如何以艰难的方式做到这一点,但是对于这种情况,是否有一些简洁的单线或 lambda 功能?

当前结果:

my_chr_list = ["a","a","a", "b", "c", "b","d", "d"]
unique_els, counts = np.unique(my_chr_list, return_counts=True)
print(unique_els, counts)

返回类似于以下内容的内容:

>>> (array(['a', 'b', 'c', 'd'], 
     dtype='<U1'), array([3, 2, 1, 2], dtype=int64))

但是,我想要的是:

>>> (array(['a', 'b', 'd', 'c'], 
     dtype='<U1'), array([3, 2, 2, 1], dtype=int64))

【问题讨论】:

    标签: python python-3.x sorting numpy unique


    【解决方案1】:

    您不能直接使用unique 函数执行此操作。相反,作为 Numpythonic 方法,您可以使用 return_index 关键字获取唯一项目的索引,然后使用 np.argsort 获取排序的 count 项目的索引,并使用结果根据它们的频率查找项目。

    In [33]: arr = np.array(my_chr_list)
    
    In [34]: u, count = np.unique(my_chr_list, return_counts=True)
    
    In [35]: count_sort_ind = np.argsort(-count)
    
    In [36]: u[count_sort_ind]
    Out[36]: 
    array(['a', 'b', 'd', 'c'], 
          dtype='<U1')
    
    In [37]: count[count_sort_ind]
    Out[37]: array([3, 2, 2, 1])
    

    【讨论】:

    • 我相信-count in np.argsort(-count) 是返回反向排序数组的索引。我在 numpy 文档中并没有完全找到这条指令;用负数索引类似列表的数据结构往往会反转返回的顺序,这是一般的经验法则吗?提前致谢。
    • @SumanthLazarus 不,文档中没有明确提及。这完全取决于排序功能的工作方式。即他们对给定的可迭代(降序或升序)进行排序的方式,使用否定您可以反转排序顺序。
    猜你喜欢
    • 2015-08-31
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多