numpy.unique
函数允许在return_counts
为True
时返回唯一元素的计数。现在返回的元组由两个包含唯一元素的数组组成,第二个包含一个count数组,两者都按唯一元素排序。现在有没有办法根据计数数组而不是唯一元素进行排序?我的意思是我知道如何以艰难的方式去做,但这种情况下是否有一些简洁的单线或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))
答案 0 :(得分:6)
您无法直接使用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])