python - np.lexsort 背后的排序逻辑是什么?

标签 python numpy

这个功能是如何工作的?

import numpy as np
first_names = (5,5,5)
last_names = (3,1,2)
x = np.lexsort((first_names, last_names))
print(x)

它给出输出 [1 2 0] 。我假设这两个列表是按变量last_names 排序的。如果是这样,数字2怎么会有索引0。2在1和3之间,所以我不明白这种排序是如何工作的。请解释一下。

最佳答案

本质上,np.lexsort((first_names, last_names)) 表示:首先按 last_name 排序,然后按 first_name 排序

阅读documentation ,特别是位于“对两列数字进行排序:”下的示例,揭示了很多内容。本质上,您首先按 last_name 排序,这会重新排序,以便索引 1 (其值为 1)位于第一个,索引 2 (其值为值为 2) 是第二个,索引 0(其值为 3)是第三个。按照此顺序,排序后的 last_name 最终为 (1,2,3),即已排序。然后,如果有任何平局,first_name 中相应的索引将成为平局打破者。

例如,考虑以下情况:

first_names = (5,5,4)
last_names = (3,1,1)

last_name 中的索引 12 之间存在联系(它们的值都是 1),该联系将被它们的值打破first_name 中的相应索引。在 first_name 的索引 12 处,索引 2(值 4)低于索引 1 (值 5),所以它将排在第一位。因此,生成的 lexsort 将是 [2,1,0]:

np.lexsort((first_names, last_names))
# array([2, 1, 0])

关于python - np.lexsort 背后的排序逻辑是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49460429/

相关文章:

python - 在 Pandas 中将数字 sas 日期转换为日期时间

python - 更改 Django 的 ROOT_URLCONF

python - 动态函数创建和函数体评估

python - 如何用可变的有限数量的元素求和?

python - 使用 zip 和 np.insert 将零部分插入 numpy 数组

python - 使用 cv2 VideoWriter 编写 numpy 数组

python - 大 numpy 数组中的重复位

python - 使用 matplotlib 时如何修复 "MaskedArrayFutureWarning"?

python - python 中的日期时间比较

python - Altair 的累积计数