web-dev-qa-db-ja.com

配列の行をPython

ある配列の行を別の配列の値でソートしようとしています。例えば:

import numpy as np
arr1 = np.random.normal(1, 1, 80)
arr2 = np.random.normal(1,1, (80,100))

Arr1を降順に並べ替え、arr1とarr2の現在の関係を維持したい(つまり、両方を並べ替えた後、arr1[0]arr2[0, :]の行が同じになる)。

36
mike

次のように argsort を使用します。

arr1inds = arr1.argsort()
sorted_arr1 = arr1[arr1inds[::-1]]
sorted_arr2 = arr2[arr1inds[::-1]]

この例では、降順で並べ替えます。

58
keflavich

Zip関数を使用します。Zip( *sorted( Zip(arr1, arr2) ) )これにより、必要な処理が実行されます。

ここで説明:Zip(arr1, arr2)は2つのリストを結合するため、[(0、[...リスト0 ...])、(1、[...リスト1 ... ])、...]次に、sorted(...)を実行します。デフォルトでは、タプルの最初のフィールドに基づいてソートされます。次に、再度Zip(...)を実行します。これにより、ソートされたタプルが取得され、タプルの最初の要素(arr1から)と2番目の要素(arr2から)から2つのリストが作成されます。

6
mklauber