2016-04-12 26 views
1

したがって、私はpythonで要素の多次元配列をソートしようとしています。配列は難しいものですが、残念ながらopencv関数が返すものです。Pythonのx、y座標の多次元次元配列を並べ替える

これらは

[array([[[ 13, 178]],[[ 50, 179]],[[ 49, 258]],[[ 12, 257]]]), 
array([[[ 58, 93]],[[105, 94]],[[104, 171]],[[ 57, 170]]]), 
array([[[ 13, 93]],[[ 50, 94]],[[ 49, 171]],[[ 12, 170]]]), 
array([[[ 58, 9]],[[105, 10]],[[104, 86]],[[ 57, 85]]]), 
array([[[13, 9]], [[50, 10]],[[49, 86]],[[12, 85]]]), 
array([[[ 58, 178]],[[105, 179]],[[104, 257]],[[ 57, 257]]])] 

は今では、これがソート必要な方法は、各numpyの配列の最初の要素である(...後方Iが知っている)Y、X座標である(それを呼び出すことができA)、およびDESCENDING内のaのSECOND要素。私はASCENDINGオーダーの最初のエレメントですべてのタイを壊す必要があります。

だから、これは今

[array([[[ 13, 178]],[[ 50, 179]],[[ 49, 258]],[[ 12, 257]]]), 
array([[[ 58, 178]],[[105, 179]],[[104, 257]],[[ 57, 257]]]), 
array([[[ 13, 93]],[[ 50, 94]],[[ 49, 171]],[[ 12, 170]]]), 
array([[[ 58, 93]],[[105, 94]],[[104, 171]],[[ 57, 170]]]), 
array([[[13, 9]], [[50, 10]],[[49, 86]],[[12, 85]]]), 
array([[[ 58, 9]],[[105, 10]],[[104, 86]],[[ 57, 85]]])] 

になってしまうだろう、私はそれぞれがアクセスnparrayがある

items[each][first][0][Y_POS(or X_POS)] 

を使用して、これらの要素にアクセスする方法を考え出した(そのうちの6があります) であり、Y_POSはy位置を指し、X_POSはx位置を指す。

他の2つの変数firstと0は決して変更されません。

これを効率的に実行するには、どこから始めたらいいのか分からないので、助けてください。座標はY、X表記であることに注意してください。

ありがとうございます。

答えて

0

Aは、すべてのデータを含む4dの配列であることを考える:

I = np.argsort(A[:, 0, 0, 0]) 
A = A[I[::-1]] 
I = np.argsort(A[:, 0, 0, 1], kind='mergesort') 
A = A[I[::-1]] 

まずすぎて、その後の並べ替えの逆の順序でソートY上の私たち、逆の順序でX、Xに下降が、Yで昇順になりますXが等しいとき。安定したソートアルゴリズムを使用して、最初のソート結果をスクランブリングしないようにする必要があることに注意してください。 mergesortはそのトリックを行うべきです。

関連する問題