0

周囲の要素を含む 3 つのネストされた配列があり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 番目の要素がソートされるという事実を使用した解決策があるかどうか疑問に思っていました。

繰り返しますが、3 つのネストされた配列を組み合わせて、個々の配列の 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だけ) 高速ですが、入力が完全にソートされていない場合は、単純にオプションではありません。純粋な python であると私は信じているので、パラメーターを使用してheapq再実装することができます。heapq.mergekey=

于 2013-09-26T15:37:20.223 に答える
0

見てくださいheapq.merge-それはあなたが必要とすることをしませんか?

于 2013-09-26T15:23:11.830 に答える