我有三个嵌套数组,包含大约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个元素进行排序的事实的解决方案。
重申一下,是否有一种有效的方法可以组合三个嵌套数组并在第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 :(得分:0)
看看heapq.merge
- 它不能满足您的需求吗?
答案 1 :(得分: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 4 ),但如果你的输入没有完全排序,那么它根本就不是一个选项。我相信heapq
是纯python,因此您可以使用heapq.merge
参数重新实现key=
。