2016-09-17 10 views
2

私はnumpyを学習していて、Pythonを使用して助けを求めています。 1つの行または列を学習経験として並べ替えたいと思います。彼らのドキュメントを見ると、apply_along_axisが表示されますが、スプライス/セレクタにどの行や列を適用するかを指定する方法については、ドキュメントにパラメータがありません。numpyとpythonを使用して行列の1つの行または列に関数を適用するにはどうすればいいですか?

私は2番目の行だけを並べ替えたいです。 はここで...

import numpy as np 
A = [29,-11,10,-160,61,-55,55,-21,19] 
A = np.asarray(A) 
A = np.reshape(A, (3,-1)) 
np.apply_along_axis(func1d=sorted, axis=1, arr=A) #this line is not correct 

array([[ 29, -11, 10], 
     [-160, 61, -55], 
     [ 55, -21, 19]]) 

私は次のような出力を見たいのですが...次の配列を開始しています...これまでの私のコードです

array([[ 29, -11, 10], 
     [-160, -55, 61], 
     [ 55, -21, 19]]) 
+1

'A [1] .sort()'は行を選択して並べ替えます。 – Divakar

+0

また、lambda x:x + 1のような行にlambda関数を適用したいと考えています。私の例ではソートが実現しなかったので、質問に矛盾が生じます。 – JosephMiguel

答えて

4

インプレースソート方式があります。

In [75]: A=np.array(A).reshape(3,-1) 
In [76]: A 
Out[76]: 
array([[ 29, -11, 10], 
     [-160, 61, -55], 
     [ 55, -21, 19]]) 
In [77]: A[1,:].sort() 
In [78]: A 
Out[78]: 
array([[ 29, -11, 10], 
     [-160, -55, 61], 
     [ 55, -21, 19]]) 

私はちょうどそれが配列の単一の行で動作し、試してみました。それは動作するようです。 (私はDivakarのコメントを見過ごした)。

apply_along...およびapply_over...は、1つ以上のディメンションに対して繰り返し処理を簡単に(高速ではなく)、このような場合には強制終了する便利な関数です。

np.sort機能でこれを理解するのが容易であってもよい。

In [85]: np.sort(A[1,:]) 
Out[85]: array([-160, -55, 61]) 

関数がソートされた行のコピーを返します。独自のソート方法を持っているので、通常、我々はそのようなsortedなどの一般的なPythonのリストのバージョンを使用する必要はありません

In [86]: A[1,:]=np.sort(A[1,:]) 

numpy:私たちは、その後、バックAにそれを書くことができます。しかし、これは動作します:A[1,:]=sorted(A[1,:])

関連する問題