python - 如何按频率对 NumPy 数组进行排序?

标签 python arrays sorting 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

其中 problems[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]

关于python - 如何按频率对 NumPy 数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51737245/

相关文章:

java - 如何将字符串缓冲区存储到字符串数组中?

php - 将数据库中的值添加到数组中,排序并显示

c - 我必须对代码进行哪些更改才能对负数进行排序?

python - 使用 python 和 __repr__ 打印嵌套对象

python - 转换 "jiffy"时间

python - SAP HANA Python 连接 HDBCLI

c++ - `std::set` 在每种情况下都会对元素进行排序吗?

python - 不工作 {% csrf_token %}

c++ - 将特征矩阵转换为 std::vector<std::array<>> 形式

php - 无法以正确格式为 PHP in_array() 获取数据库数据