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))

将它们排序到第 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])]
4

2 回答 2

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=参数重新实现。

于 2013-09-26T15:37:20.223 回答
0

看看heapq.merge- 它不是做你需要的吗?

于 2013-09-26T15:23:11.830 回答