NumPy'de bir diziyi n'inci sütuna göre nasıl sıralayabilirim?
Örneğin,
a = array([[9, 2, 3],
[4, 5, 6],
[7, 0, 5]])
Satırları ikinci sütuna göre sıralamak istiyorum, öyle ki geri alıyorum:
array([[7, 0, 5],
[9, 2, 3],
[4, 5, 6]])
Sanırım bu işe yarar: a[a[:,1].argsort()]
Bu, a
nın ikinci sütununu gösterir ve buna göre sıralar.
@steve's aslında bunu yapmanın en zarif yoludur.
Doğru" yol için numpy.ndarray.sort'nin sıra anahtar sözcüğü argümanına bakın
Ancak, dizinizi alanları olan bir dizi (yapılandırılmış bir dizi) olarak görmeniz gerekir.
Eğer dizinizi başlangıçta alanlarla tanımlamadıysanız, "doğru" yol oldukça çirkindir...
Hızlı bir örnek olarak, sıralamak ve bir kopyasını döndürmek için:
In [1]: import numpy as np
In [2]: a = np.array([[1,2,3],[4,5,6],[0,0,1]])
In [3]: np.sort(a.view('i8,i8,i8'), order=['f1'], axis=0).view(np.int)
Out[3]:
array([[0, 0, 1],
[1, 2, 3],
[4, 5, 6]])
Yerinde sıralamak için:
In [6]: a.view('i8,i8,i8').sort(order=['f1'], axis=0) #<-- returns None
In [7]: a
Out[7]:
array([[0, 0, 1],
[1, 2, 3],
[4, 5, 6]])
Bildiğim kadarıyla @Steve'in önerisi gerçekten de bunu yapmanın en zarif yolu...
Bu yöntemin tek avantajı, "order" bağımsız değişkeninin aramanın sıralanacağı alanların bir listesi olmasıdır. Örneğin, order=['f1','f2','f0'] sağlayarak önce ikinci sütuna, sonra üçüncü sütuna, sonra da ilk sütuna göre sıralayabilirsiniz.
Python dokümantasyon vikisinden]1, yapabileceğinizi düşünüyorum:
a = ([[1, 2, 3], [4, 5, 6], [0, 0, 1]]);
a = sorted(a, key=lambda a_entry: a_entry[1])
print a
Çıktı şudur:
[[[0, 0, 1], [1, 2, 3], [4, 5, 6]]]