我有一个第一个数组i
包含日期时间元素(形状为(33416,)),第二个数组m
包含浮点数值(形状为(33416,20))。这与在特定时刻进行的20次测量相对应。
我想根据i
中增加的日期时间值对i
数组进行排序,并相应地对m
数组进行排序,以便在此时刻增加测量的瞬间及其相应的20个测量值。
有人可以帮帮我吗?或了解我的需求???
答案 0 :(得分:6)
你也可以使用numpy。假设你有:
dates = numpy.array([datetime(2012,02,03,12,00,00), datetime(2012,02,03,15,00,00), datetime(2012,02,03,13,00,00)])
values = numpy.array([[1, 1], [3, 3], [2, 2]])
你可以先做:
unified = numpy.concatenate((dates.reshape(len(dates), 1), values), axis=1)
这将合并你的两个列表,考虑你想要的应该是一个更适合的方式来保存你的数据。所以现在你有了:
unified = array([[2012-02-03 12:00:00, 1, 1],
[2012-02-03 15:00:00, 3, 3],
[2012-02-03 13:00:00, 2, 2]], dtype=object)
现在你可以做到:
unified = numpy.sort(unified, axis=0)
这将按日期排序。现在,如果你仍然想要单独的列表,你可以使用它们:
unified[:, 0]
>>> array([2012-02-03 12:00:00, 2012-02-03 13:00:00, 2012-02-03 15:00:00], dtype=object)
unified[:, 1:]
>>> array([[1, 1],
[2, 2],
[3, 3]], dtype=object)
评论后编辑 好了,我完全理解你想要的东西,你可以通过替换
来实现 unified = numpy.sort(unified, axis=0)
使用:
unified = numpy.array(sorted(unified, key= lambda x: x[0]))
修改强>
你试过我刚刚建议的吗?在我的终端: unified = numpy.array([[datetime(2012,02,03,12,00,00), 4, 1],[datetime(2012,02,03,15,00,00), 5, 2],[datetime(2012,02,03,13,00,00), 2, 1]], dtype=object)
>>> unified
array([[2012-02-03 12:00:00, 4, 1],
[2012-02-03 15:00:00, 5, 2],
[2012-02-03 13:00:00, 2, 1]], dtype=object)
>>> unified = numpy.array(sorted(unified, key=lambda x: x[0]))
>>> unified
array([[2012-02-03 12:00:00, 4, 1],
[2012-02-03 13:00:00, 2, 1],
[2012-02-03 15:00:00, 5, 2]], dtype=object)
答案 1 :(得分:0)
我不完全确定你在问什么 - 你的问题是模糊的 - 为什么“相应地对m
阵列进行排序,以便在此时刻增加测量的瞬间及其相应的20个测量值”意思?
但是,这就是我认为你要问的答案:
def special_sort(i, m):
myList = zip(i, m)
mylist.sort(key=lambda x: x[0])
return myList
希望这有帮助