python - 如何按频率对 NumPy 数组进行排序?
问题描述
我正在尝试按元素的频率对 NumPy 数组进行排序。例如,如果有一个数组 [3,4,5,1,2,4,1,1,2,4],输出将是另一个 NumPy,从最常见到最不常见的元素(无重复)排序。所以解决方案是[4,1,2,3,5]。如果两个元素的出现次数相同,则最先出现的元素将首先放置在输出中。我试过这样做,但我似乎无法得到一个实用的答案。到目前为止,这是我的代码:
temp1 = problems[j]
indexes = np.unique(temp1, return_index = True)[1]
temp2 = temp1[np.sort(indexes)]
temp3 = np.unique(temp1, return_counts = True)[1]
temp4 = np.argsort(temp3)[::-1] + 1
其中问题[j] 是一个 NumPy 数组,如 [3,4,5,1,2,4,1,1,2,4]。temp4 到目前为止返回 [4,1,2,5,3] 但它不正确,因为当两个元素具有相同的出现次数时它无法处理。
解决方案
您可以对每个元素的频率使用 argsort 来查找排序位置并将索引应用于唯一元素数组
unique_elements, frequency = np.unique(array, return_counts=True)
sorted_indexes = np.argsort(frequency)[::-1]
sorted_by_freq = unique_elements[sorted_indexes]
推荐阅读
- jenkins - 如何从 jenkins 获取 .txt 文件的内容
- gradle - 在 KMP 中添加生成的源目录
- visual-studio-code - VS Code 启动 gdbserver
- uefi - 构建时固定的布尔 PCD 和 PCD 功能标志之间的区别
- java - 为什么使用 ANTLR4 创建正确的错误消息如此复杂?
- java - 如何记录从 OpenJDK 17 加载类的位置?(无法识别的 VM 选项“TraceClassLoading”)
- python - SFTP 连接超时
- sql - sql中的条件选择
- spring - @Autowired 没有连接我的存储库 - 空指针异常
- r - 使用 lubridate 按特定天数过滤