2016-07-09 10 views
2

私は数百の列を持つ大きな2次元配列を持っています。私は辞書編集で、つまり最初の列、次に2番目の列など、最後の列まで並べ替えたいと思います。私はこれがやりやすいはずだと思いますが、私はこれをすばやく見つける方法を見つけることができませんでした。並べ替え2d numpy配列を辞書編集的に

答えて

4

これはnumpy.lexsortが対象ですが、インターフェイスは扱いにくいです。それを2次元配列を渡し、それが最初の行まで続け、最初最後列でソートし、最後から2番目の行ををargsortます:あなたがしたい場合

>>> x 
array([[0, 0, 0, 2, 3], 
     [2, 3, 2, 3, 2], 
     [3, 1, 3, 0, 0], 
     [3, 1, 1, 3, 1]]) 
>>> numpy.lexsort(x) 
array([4, 1, 2, 3, 0], dtype=int64) 

行ごとに並べ替えるには、最初の列を主キーとして、lexsortを入力する前に配列を回転させる必要があります。

>>> x[numpy.lexsort(numpy.rot90(x))] 
array([[0, 0, 0, 2, 3], 
     [2, 3, 2, 3, 2], 
     [3, 1, 1, 3, 1], 
     [3, 1, 3, 0, 0]]) 
+0

これはうまくいくようです。だから、私はこれで検索を行う必要がありますが、どのようにするかわかりません。だから私はそれが2次元配列のソートされた行の1つであるかどうかを調べるために1次元の配列を与えたいと思います。任意の提案をいただければ幸いです。 – grigor

+0

@grigor:多分*(x行の[all(row == t)] * – user66081