2017-07-13 21 views
2

私は以下のように(5,5)np.arrayを持っています。多次元ナンパー配列ソート

np.arrayを次のように多次元に並べ替える必要があります。

>>> a 
array([[ 0, 1, 2, 3, 4], 
     [ 5, 6, 7, 8, 9], 
     [10, 11, 12, 13, 14], 
     [15, 16, 17, 18, 19], 
     [20, 21, 22, 23, 24]]) 

私がやったことを、

  1. フラット化()配列をすることができません。
  2. フラットアレイを並べ替えます。私の方法では(5,5)

から

  • 形状変更は、私はそれが悪いプログラミングpractice.Areは、そのタスクを実行する任意の洗練された方法であるように感じますか? ありがとうございます。

    >>> a array([[23, 15, 11, 0, 17], 
         [ 1, 2, 20, 4, 6], 
         [16, 22, 8, 10, 18], 
         [ 7, 12, 13, 14, 5], 
         [ 3, 9, 21, 19, 24]]) 
    
    >>> a_flat = a.flatten() 
    >>> a_flat 
    array([23, 15, 11, 0, 17, 1, 2, 20, 4, 6, 16, 22, 8, 10, 18, 7, 12, 
         13, 14, 5, 3, 9, 21, 19, 24]) 
    
    >>> a_sort = np.sort(a_flat) 
    >>> a_sorted = a_sort.reshape(5,5) 
    >>> a_sorted 
    array([[ 0, 1, 2, 3, 4], 
         [ 5, 6, 7, 8, 9], 
         [10, 11, 12, 13, 14], 
         [15, 16, 17, 18, 19], 
         [20, 21, 22, 23, 24]]) 
    
  • +0

    私は絶対にOK –

    答えて

    3

    我々はnp.ravel()で平坦化されたビューを取得し、ソートインプレースndarray.sort()と可能性 - すべてがインプレース、それはまた、任意の一時的な配列を作成し、回避ビーイング

    a.ravel().sort() 
    

    は形状を維持しますいかなる形の変更も必要としない。

    サンプル実行 -

    In [18]: a 
    Out[18]: 
    array([[23, 15, 11, 0, 17], 
         [ 1, 2, 20, 4, 6], 
         [16, 22, 8, 10, 18], 
         [ 7, 12, 13, 14, 5], 
         [ 3, 9, 21, 19, 24]]) 
    
    In [19]: a.ravel().sort() 
    
    In [20]: a 
    Out[20]: 
    array([[ 0, 1, 2, 3, 4], 
         [ 5, 6, 7, 8, 9], 
         [10, 11, 12, 13, 14], 
         [15, 16, 17, 18, 19], 
         [20, 21, 22, 23, 24]]) 
    
    +0

    ラヴェル()は右ビュー(リファレンス)を返し見つけますか? – Bodhi94

    +0

    @ Bodhi94 Yup!ドキュメント参照を追加しました。 – Divakar

    +0

    ありがとう@Divakar。あなたは素晴らしいです! – Bodhi94