如何在Python中按第一列(x1值)对foundFaces数组进行排序?
按人脸x1坐标排序数组的简便方法
不用自己写循环实现排序,Python针对数组/列表排序有现成的高效方法,分两种场景说明:
场景1:你的foundFaces是NumPy数组
从你提供的输出格式来看,这大概率是NumPy数组,用NumPy内置的排序工具就能快速解决:
import numpy as np # 示例数组 foundFaces = np.array([ [414.7081, 92.99516, 482.82443, 177.7601, 0.9049758], [278.0241, 96.27542, 344.90128, 186.57086, 0.88056326], [542.65515, 69.08964, 609.4397, 162.48027, 0.88008916] ]) # 按第一列(x1值)升序排序(对应从左到右的顺序) sorted_faces = foundFaces[foundFaces[:, 0].argsort()] print(sorted_faces)
foundFaces[:, 0]:提取数组的第一列(所有行的第0个元素,即x1值).argsort():返回第一列元素排序后的索引位置- 用这些索引重新索引原数组,就得到按x1从左到右排序后的结果
场景2:你的foundFaces是普通Python列表
如果是原生列表结构,用内置的sorted()函数配合key参数即可:
# 示例列表 foundFaces = [ [414.7081, 92.99516, 482.82443, 177.7601, 0.9049758], [278.0241, 96.27542, 344.90128, 186.57086, 0.88056326], [542.65515, 69.08964, 609.4397, 162.48027, 0.88008916] ] # 按每个子列表的第一个元素(x1)升序排序 sorted_faces = sorted(foundFaces, key=lambda x: x[0]) print(sorted_faces)
key=lambda x: x[0]:指定排序依据为每个子列表的第0个元素(x1值)sorted()默认是升序排序,正好符合从左到右的需求
这两种方法都比手动循环实现的排序更高效、更简洁,尤其是NumPy方法在处理大规模数据时性能优势明显。
内容的提问来源于stack exchange,提问作者Chud37
相关产品推荐
相关产品推荐

