2013-09-26 67 views
0

我有三個嵌套的數組,含有約10,000元件(每個陣列具有不同數量的元件)。這些數組按照0th元素排序,每個內部列表中的1st元素沒有實際模式。排序三個列表成一個單一的列表中給出,每個列表進行排序

因此,例如,

a = np.array([[1,13],[2,36],[5,63],[10,35],[11,2]...]) 
b = np.array([[1,13],[3,32],[7,55],[10,30],[13,21],[15,10]...]) 
c = np.array([[2,10],[4,36],[5,58],[8,5]...]) 

什麼,我需要做的是結合陣列,然後將它們相對於第0個元素進行排序。我知道使用

D = np.concatenate((a,b,c))

把它們混合起來,然後一個簡單的方法使用,

D_sort =sorted(D, key = itemgetter(0))

給他們排序w.r.t第0個元素。然而,這非常耗時,並且我一直在想,是否有解決方案使用每個數組a,b和c中的第0個元素進行排序的事實。

所以要重申的是,是否有組合三個嵌套的數組,並將它們w.r.t鑑於每個單獨的陣列中的第0個元素是已排序的第0個元素進行排序的一種有效的方法?

對於給出的示例,輸出會是這樣,

[([ 1, 13], [ 1, 13],[ 2, 36],[ 2, 10],[ 3, 32],[ 4, 36],[ 5, 63],[ 5, 58],[ 7, 55],[8, 5],[10, 35],[10, 30],[11, 2],[13, 21],[15, 10])] 
+0

[在Python中合併兩個排序列表](http://stackoverflow.com/questions/464342/combining-two-sorted-lists-in-python) –

回答

0

看一看heapq.merge - 沒有它,你需要什麼?

+0

[Doc](http:// docs。 python.org/2/library/heapq.html)說,「假定每個輸入流已經被排序」。 OP的輸入不是按照合併的關鍵字排序的。 –

0

然而,這是非常耗時

我想這取決於你的觀點。考慮這些時間:

In [84]: a,b,c=(sorted([random.randint(1,1000000),random.randint(1,1000000)] for _ in range(random.randint(9000,11000))) for _ in range(3)) 

In [85]: %timeit sorted(a+b+c) 
100 loops, best of 3: 7.38 ms per loop 

In [86]: %timeit heapq.merge(sorted(a),sorted(b),sorted(c)) 
100 loops, best of 3: 2.53 ms per loop 

In [87]: %timeit heapq.merge(a,b,c) 
1000000 loops, best of 3: 427 ns per loop 

注:我只能打電話heapq.merge因爲我的投入是完全排序。

明顯heapq.merge更快(10 ),但如果您的輸入未完全排序,那麼它根本不是一個選項。 heapq是,我相信,純Python,所以你可能有key=參數重新實現heapq.merge

相關問題