2017-10-04 12 views
2

まず、これは動作しないコードです:numpy配列を含むタプルのリストをソートするには?

ls = [(1.0,np.array([3.0, 4.0])), (1.0,np.array([3.0, 4.1])), (3.0,np.array([2.0, 1.0]))] 
ls.sort() 

あなたが見ることができるように、私はタプル(ls)のリストを持っています。各タプルの最初の要素は浮動小数点数です。私はls.sort()でリストをソートしようとします。ほとんどの場合、正常に動作します。しかし、時には(上記の例のように)、最初の要素と同じ値のタプルがあります。この場合、Pythonはタプルの2番目の要素を使用してタプルをソートしようとしますが、タプルの2番目の場所ではnumpy配列があるため動作しません。

タプルの2番目の要素を無視してリストをソートするにはどうすればよいですか?最初の要素が同じであれば、順序は気にしません(元の順序、またはランダムにすることができます)。

答えて

1

おそらくkeyパラメータを使用しています。これは、あなたの望むことですか?

import numpy as np 
ls = [(1.0,np.array([3.0, 4.0])), (1.0,np.array([3.0, 4.1])), (3.0,np.array([2.0, 1.0]))] 
ls.sort(key=lambda x: x[0]) 
1

どちらの最初の項目

sorted(ls, key=lambda t: t[0]) 

にのみ並べ替えるまたは構造numpyの配列に全部を変換し、それが

ls_arr = np.array(ls, dtype=[('my_val', float), ('my_arr', float, 2)]) 
ls_arr.sort() 

この2番目のオプションをソートするnumpyのを依頼するのpythonを伝えます配列が常に同じ長さの場合にのみ機能します。

関連する問題