2012-01-25 10 views
12

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

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

Iは降順でARR1をソートし、ARR1およびARR2間の電流の関係が維持されなければならないたい(すなわち、両方のソーティングした後、arr1[0]arr2[0, :]の行は同じです)。

答えて

18

使用argsortとしては、次のとおりです。

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

それが降順にソートされます。

3

ジップ機能を使用してください:zip(*sorted(zip(arr1, arr2)))これは、必要な操作を行います。

説明: zip(arr1, arr2)は2つのリストを組み合わせるので、[(0、[...リスト0 ...])、(1、[...リスト1 ...] )、...] 次に、sorted(...)を実行します。これは、デフォルトではタプルの最初のフィールドに基づいてソートされます。 次に、タプルを並べ替えてから、タプルの最初の要素(arr1)と2番目の要素(arr2)から2つのリストを作成する​​を再度実行します。