web-dev-qa-db-ja.com

Pythonの2番目の列に基づいて2D配列(numpy.ndarray)を並べ替える方法は?

すべてのコードをPythonに変換しようとしています。昇順で2番目の列に基づいて並べ替える必要があるように、2つの列を持つ配列を並べ替えます。次に、最初の列のデータを合計する必要があります(最初の行から、たとえば100行目まで)。 「Data.sort(axis = 1)」を使用しましたが、機能しません。この問題を解決するアイデアはありますか?

20
Sam

.argsort()を使用すると、指定された_numpy.array_をソートするインデックスの_numpy.array_を返します。関数または配列のメソッドとして呼び出します。たとえば、あなたが持っていると仮定します

_import numpy as np

arr = np.array([[-0.30565392, -0.96605562],
                [ 0.85331367, -2.62963495],
                [ 0.87839643, -0.28283675],
                [ 0.72676698,  0.93213482],
                [-0.52007354,  0.27752806],
                [-0.08701666,  0.22764316],
                [-1.78897817,  0.50737573],
                [ 0.62260038, -1.96012161],
                [-1.98231706,  0.36523876],
                [-1.07587382, -2.3022289 ]])
_

これで、並べ替える列で.argsort()を呼び出すことができ、元の配列にインデックスとして渡すことができる特定の列を並べ替える行インデックスの配列が提供されます。

_>>> arr[arr[:, 1].argsort()]
array([[ 0.85331367, -2.62963495],
       [-1.07587382, -2.3022289 ],
       [ 0.62260038, -1.96012161],
       [-0.30565392, -0.96605562],
       [ 0.87839643, -0.28283675],
       [-0.08701666,  0.22764316],
       [-0.52007354,  0.27752806],
       [-1.98231706,  0.36523876],
       [-1.78897817,  0.50737573],
       [ 0.72676698,  0.93213482]])
_

numpy.argsort()を同等に使用できます

_>>> arr[np.argsort(arr[:, 1])]
array([[ 0.85331367, -2.62963495],
       [-1.07587382, -2.3022289 ],
       [ 0.62260038, -1.96012161],
       [-0.30565392, -0.96605562],
       [ 0.87839643, -0.28283675],
       [-0.08701666,  0.22764316],
       [-0.52007354,  0.27752806],
       [-1.98231706,  0.36523876],
       [-1.78897817,  0.50737573],
       [ 0.72676698,  0.93213482]])
_
43
JaminSore

sorted(Data, key=lambda row: row[1])はそれを行うべきです。

4
a p