如何对np.array格式的日期矩阵排序并还原为初始格式?
按日期排序numpy矩阵并还原原格式的解决方案
核心思路
不需要将矩阵转换为datetime对象再转回,直接利用numpy的多关键字排序功能,按照年→月→日→时→分→秒的优先级排序,就能直接得到原格式的排序后矩阵。
解决方案代码
import numpy as np data = np.array( [[2015, 1, 1, 23, 4, 59], [2015, 4, 30, 23, 5, 1], [2015, 1, 1, 23, 5, 25], [2015, 2, 15, 58,5, 0], [2015, 5, 20, 50, 27, 37], [2015, 6, 21, 25, 27, 29]] ) # 按秒、分、时、日、月、年的逆序传入参数,实现年→月→日→时→分→秒的优先级排序 sorted_data = data[np.lexsort((data[:,5], data[:,4], data[:,3], data[:,2], data[:,1], data[:,0]))] print("排序后的矩阵:") print(sorted_data)
代码说明
- *
np.lexsort*是numpy的多关键字排序函数,参数需按逆序传入排序优先级:最后一个参数是最优先的排序关键字。这里传入的顺序是秒、分、时、日、月、年,实际实现的是年>月>日>时>分>秒的排序逻辑。 - 排序后直接返回原格式的numpy数组,完全保留原矩阵的结构和数据类型,无需额外转换步骤。
输出结果
排序后的矩阵: [[2015 1 1 23 4 59] [2015 1 1 23 5 25] [2015 2 15 58 5 0] [2015 4 30 23 5 1] [2015 5 20 50 27 37] [2015 6 21 25 27 29]]
注意:如果矩阵中存在非法时间值(比如小时为58),
np.lexsort会按数值大小直接排序。若需校验日期合法性,可先通过datetime模块过滤异常行,再执行排序操作。
内容的提问来源于stack exchange,提问作者NTK
相关产品推荐
相关产品推荐

