2012-02-03 25 views
1

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

回答

4

您还可以使用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) 
+0

中发布详细的I/O规格。这几乎就是这样。但是这也是通过增加顺序来排序所有列。我只想根据时间,除非我弄乱我的测量....我会看看numpy.sort文档... – user1187727 2012-02-03 15:33:33

+0

不是那么明显的问题...这种表示很好:'统一=数组([[[ 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 = 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)'我想获得'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)' – user1187727 2012-02-03 16:14:10

+0

这正是我想要的获取! 谢谢。 (这应该在numpy.sort函数的选项中实现。) – user1187727 2012-02-03 16:33:24

0

我不完全确定你在问什么 - 你的问题是模糊的 - 为了在这个瞬间增加测量的瞬间和相应的20个测量结果,“相应排列m阵列”是什么意思?

但是,这里的答案是什么,我认为你是问:

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

希望这有助于

+0

好的,我应该简化我的请求。例如,'i'包含三个测量时刻: [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.]] 我想通过增加次数来获得'i'并且'm' litke this: [[1.,1.], [2.,2], [3.,]] 我希望它是更清晰像这样...谢谢 – user1187727 2012-02-03 14:55:08

+0

'm.sort()'会按照你要求的方式对'm'进行排序。我仍然不明白你想用'i'做什么 – inspectorG4dget 2012-02-03 15:26:24

+0

我想根据我的测量结果的值来增加日期时间的排序... – user1187727 2012-02-03 15:35:45