2016-11-28 16 views
0

I持つ2つの列ベクトル私はベクトルの組み合わせと配列

C = 

    8  'John' 
    2  'Peter' 
    2  'Paul' 
    1  'Evans' 

の配列を持っているためにそれらを組み合わせて、どのように私が持っているように昇順にIソートCを行うにはどうすればよい

A = [8, 2, 2, 1] 
B = ['John', 'Peter', 'Paul', 'Evans'] 

C = 

    1  'Evans' 
    2  'Paul' 
    2  'Peter' 
    8  'John' 

私はMatlabからPythonに移行したばかりですが、これでは問題があります。

+0

は、それらのnumpyの配列ですまたはリスト? – Divakar

+0

@DivakarこれらはNumPy配列です。 –

+0

「ジョン」はどこで消えましたか?なぜポールは昇格したのですか?彼はポールライアンが好きですか? :) – Divakar

答えて

0

ここもソート注文した指標を得るために維持kind = mergesortnp.argsortを使用してのアプローチです。そこで、我々はそうのように、所望の出力のために、これらの指標とカラムとインデックス内の入力配列を積み重ねることができます -

In [172]: A 
Out[172]: array([8, 2, 2, 1]) 

In [173]: B 
Out[173]: 
array(['John', 'Peter', 'Paul', 'Evans'], 
     dtype='|S5') 

In [174]: sidx = A.argsort(kind='mergesort') 

In [175]: np.column_stack((A,B))[sidx] 
Out[175]: 
array([['1', 'Evans'], 
     ['2', 'Peter'], 
     ['2', 'Paul'], 
     ['8', 'John']], 
     dtype='|S21') 

あなたは、出力配列の最初の列のintタイプを維持したい場合は、あなたはそうのように、オブジェクトDTYPE配列を作成することができます -

arr = np.empty((len(A),2),dtype=object) 
arr[:,0] = A 
arr[:,1] = B 
out = arr[sidx] # sidx is same as from previous approach 

結果 -

In [189]: out 
Out[189]: 
array([[1, 'Evans'], 
     [2, 'Peter'], 
     [2, 'Paul'], 
     [8, 'John']], dtype=object) 
0

使用np.column_stack()np.sort()

In [9]: np.column_stack((A, B)) 
Out[9]: 
array([['8', 'John'], 
     ['2', 'Peter'], 
     ['2', 'Paul'], 
     ['1', 'Evans']], 
     dtype='<U5') 

In [10]: 

In [10]: np.sort(np.column_stack((A, B)))[::-1] 
Out[10]: 
array([['1', 'Evans'], 
     ['2', 'Paul'], 
     ['2', 'Peter'], 
     ['8', 'John']], 
     dtype='<U5') 
+0

それはよく並べ替えるようではないようです。それは私に[2,2,8,1]配置を与える –

関連する問題