2016-10-31 10 views
0

私は、配列と値がフラットな配列があります。 を明確にするために、これは、配列がどのように見えるかです:PythonでNumpy配列を並べ替えます

numpy.sortまたはargsortを使用して
x = [([1,2,3],1),([2,3,4],8),([3,4,5],3), ([4,5,6],2)] 

、各要素に第二事で上記の配列をソートする方法を私に明確ではありません。

x = [([1,2,3],1),([4,5,6],2), ([3,4,5],3), ([2,3,4],8)] 

どれ指導をいただければ幸いです。

は、私は、配列の並べ替え後に次のようになりたいです。

答えて

1

Pythonのsorted()関数を使用できます。この仕組み

sorted(x, key=lambda x_element: x_element[1]) 

をソートキーとして、あなたはタプルの2番目の値であり、ラムダ、の戻り値を使用します。

あなたが行うことができ
6

-

x[x[:,1].argsort()] 

サンプル実行 -

In [768]: x 
Out[768]: 
array([[[1, 2, 3], 1], 
     [[2, 3, 4], 8], 
     [[3, 4, 5], 3], 
     [[4, 5, 6], 2]], dtype=object) 

In [769]: x[x[:,1].argsort()] 
Out[769]: 
array([[[1, 2, 3], 1], 
     [[4, 5, 6], 2], 
     [[3, 4, 5], 3], 
     [[2, 3, 4], 8]], dtype=object) 

あなたが最初の要素内の要素の数が異なる場合は、スライスは動作しませんし、我々はそのようなのためlist-comprehensionを使用することができます例のように -

x[np.argsort([i[1] for i in x])] 

サンプルラン -

In [782]: x 
Out[782]: 
array([[[1, 2, 3], 1], 
     [[2, 3, 4, 6], 8], 
     [[3, 4, 5], 3], 
     [[4, 5, 6], 2]], dtype=object) 

In [783]: x[np.argsort([i[1] for i in x])] 
Out[783]: 
array([[[1, 2, 3], 1], 
     [[4, 5, 6], 2], 
     [[3, 4, 5], 3], 
     [[2, 3, 4, 6], 8]], dtype=object)