2015-06-01 13 views
8

Nếu chúng ta có một mảng 1dCó argsort numpy trả về một mảng các chỉ số 2d?

arr = np.random.randint(7, size=(5)) 
# [3 1 4 6 2] 
print np.argsort(arr) 
# [1 4 0 2 3] <= The indices in the sorted order  

Nếu chúng ta có một mảng 2ngày

arr = np.random.randint(7, size=(3, 3)) 
# [[5 2 4] 
# [3 3 3] 
# [6 1 2]] 
print np.argsort(arr) 
# [[1 2 0] 
# [0 1 2] 
# [1 2 0]] <= It sorts each row 

Những gì tôi cần là các chỉ số 2d rằng loại ma trận này trong đó là toàn bộ. Một cái gì đó như thế này:

# [[2 1] => 1 
# [0 1] => 2 
# [2 2] => 2 
# . 
# . 
# . 
# [0 2] => 4 
# [0 0] => 5 
# [2 0]] => 6 

Làm cách nào để nhận "2 chỉ mục" để sắp xếp mảng 2d?

Trả lời

18

Áp dụng numpy.argsort trên mảng phẳng và sau đó làm sáng tỏ những chỉ số trở lại (3, 3) hình dạng:

>>> arr = np.array([[5, 2, 4], 
[3, 3, 3], 
[6, 1, 2]]) 
>>> np.dstack(np.unravel_index(np.argsort(arr.ravel()), (3, 3))) 
array([[[2, 1], 
     [0, 1], 
     [2, 2], 
     [1, 0], 
     [1, 1], 
     [1, 2], 
     [0, 2], 
     [0, 0], 
     [2, 0]]]) 
+1

jezz, kết quả này là gì ...? – Martian2049

Các vấn đề liên quan