如何对存储二维数组坐标的嵌套列表进行lexicographically排序
字典序坐标排序实现方法
关于np.lexsort返回值的说明
np.lexsort的设计逻辑是接收排序键序列,排序优先级从最后一个传入的键到第一个传入的键依次升高,最终返回的是排序后元素对应原数组的索引数组,而非排序后的原数据。
你调用np.lexsort([[4,3],[4,5]])得到的返回值是array([0, 1]),这个结果本身符合你的排序预期:索引0对应的原元素[4,3]排在首位,索引1对应的[4,5]排在次位,只是你需要用返回的索引去原数组取对应值才能得到排序后的结果。
两种实现方案
纯Python实现(无numpy依赖)
Python内置的列表排序、取最值逻辑本身默认就是字典序,直接调用即可:
a = [[4,3],[4,5]] # 直接取字典序最小的坐标 min_coord = min(a) # 输出结果:[4, 3] # 如果需要对全量坐标排序 sorted_coords = sorted(a)
numpy实现
如果数据本身是numpy数组,可以按如下方式调用np.lexsort:
import numpy as np a = np.array([[4,3],[4,5]]) # 排序优先级:先比较行(第一列)、行相同再比较列(第二列) # 注意lexsort优先级倒序,所以传参顺序为(列数组, 行数组) sorted_idx = np.lexsort((a[:,1], a[:,0])) # 按索引取排序后的数组 sorted_coords = a[sorted_idx] # 取最小坐标 min_coord = sorted_coords[0] # 输出结果:array([4, 3])
内容的提问来源于stack exchange,提问作者Ahamed Moosa
相关产品推荐
相关产品推荐

