NumPy'de dizileri sütuna göre sıralama

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.

Yorumlar (9)
Çözüm

[@steve][1]'s aslında bunu yapmanın en zarif yoludur.

Doğru" yol için [numpy.ndarray.sort][2]'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) #
Yorumlar (11)

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]]]
Yorumlar (1)