Python 通过增加datetime进行Numpy排序

Python 通过增加datetime进行Numpy排序,python,datetime,sorting,numpy,Python,Datetime,Sorting,Numpy,我有第一个数组I包含日期时间元素(形状为(33416,)和第二个数组m包含浮点值(形状为(33416,20))。这对应于在特定时刻进行的20次测量。 我想根据I中不断增加的日期时间值对I数组进行排序,并相应地对m数组的行进行排序,以获得不断增加的测量瞬间及其相应的20次测量。 有人能帮我吗?还是理解我的需求 我不完全确定你在问什么-你的问题很模糊-什么是“对m数组的行进行相应的排序,以增加测量的瞬间,并在这个瞬间对应20个测量”的意思 但是,以下是我认为你所问问题的答案: def special

我有第一个数组
I
包含日期时间元素(形状为(33416,)和第二个数组
m
包含浮点值(形状为(33416,20))。这对应于在特定时刻进行的20次测量。 我想根据
I
中不断增加的日期时间值对
I
数组进行排序,并相应地对
m
数组的行进行排序,以获得不断增加的测量瞬间及其相应的20次测量。
有人能帮我吗?还是理解我的需求

我不完全确定你在问什么-你的问题很模糊-什么是“对
m
数组的行进行相应的排序,以增加测量的瞬间,并在这个瞬间对应20个测量”的意思

但是,以下是我认为你所问问题的答案:

def special_sort(i, m):
    myList = zip(i, m)
    mylist.sort(key=lambda x: x[0])
    return myList

希望这有帮助

您也可以使用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 = 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.concatenate((dates.reshape(len(dates), 1), values), axis=1)
这将合并您的两个列表,考虑到您想要什么应该是保存数据的更好方式。现在你有了:

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 = 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([[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)

好的,我应该简化我的要求。例如,
i
包含3个测量瞬间:[datetime(2012,02,03,12,00,00),datetime(2012,02,03,15,00,00),datetime(2012,02,03,13,00,00)]和
m
在每个瞬间包含2个测量:[1,1.],[3,3.],[2,2.]]我想通过增加次数和
m
来获得
i
,如下:[[1,1.],[2,2.],[3,3.]]我希望这样更清楚……谢谢
m.sort()
将按照您要求的方式对
m
进行排序。我仍然不明白您想用
I
做什么。我想根据我的测量值,根据不断增加的日期时间进行排序…没有办法执行此操作???例如,如果我有一个=numpy.array([[4,3,2],[2,8,6],[1,4,7]),并且我想要一个数组([[1, 4, 7], [2, 8, 6], [4, 3, 2]])其中,只有第一个值被计算为排序,行的其他列元素按相应的顺序排列……您已经接受了答案。这告诉我问题已经解决。如果不是这样,请在问题中发布详细的I/O规范。这几乎就是。但这也是对所有列b进行排序y递增顺序。我只想根据时间,除非我弄乱了我的测量……我将查看numpy.sort文档……没有那么明显的问题……这种表示很好:
unified=array([[2012-02-03 12:00:00,1,1],[2012-02-03 15:00:00,3,3],[2012-02-03 13:00,2,2]],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)
我想获得
数组([2012-02-03 12:00:00,4,1],[2012-02-03 13:00,2,1],[2012-02-03 15:00,5,2]],dtype=object)
这正是我想要的!!!谢谢。(这应该在numpy.sort函数的选项中实现。)