通过增加日期时间进行Numpy排序

时间:2012-02-03 14:44:30

标签: python datetime sorting numpy

我有一个第一个数组i包含日期时间元素(形状为(33416,)),第二个数组m包含浮点数值(形状为(33416,20))。这与在特定时刻进行的20次测量相对应。 我想根据i中增加的日期时间值对i数组进行排序,并相应地对m数组进行排序,以便在此时刻增加测量的瞬间及其相应的20个测量值。 有人可以帮帮我吗?或了解我的需求???

2 个答案:

答案 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

希望这有帮助