meo*_*eow 7 python sorting numpy unique python-3.x
numpy.unique如果return_counts为,则该函数允许返回唯一元素的计数True。现在,返回的元组由两个数组组成,一个数组包含唯一元素,第二个数组包含一个count数组,两者均由唯一元素排序。现在是否有一种方法可以根据counts数组而不是唯一元素对它们进行排序?我的意思是我知道如何做到这一点很困难,但是在这种情况下是否存在一些简洁的单行或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)
Run Code Online (Sandbox Code Playgroud)
它返回与此类似的东西:
>>> (array(['a', 'b', 'c', 'd'],
dtype='<U1'), array([3, 2, 1, 2], dtype=int64))
Run Code Online (Sandbox Code Playgroud)
但是,我想要拥有:
>>> (array(['a', 'b', 'd', 'c'],
dtype='<U1'), array([3, 2, 2, 1], dtype=int64))
Run Code Online (Sandbox Code Playgroud)
Kas*_*mvd 11
您不能直接使用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])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2933 次 |
| 最近记录: |