2014-10-04 31 views
17

Tôi đang tìm một giải pháp một dòng có thể giúp tôi thực hiện những việc sau.Numpy: Sắp xếp lại mảng dựa trên mảng chỉ mục

Giả sử tôi có

array = np.array([10, 20, 30, 40, 50]) 

Tôi muốn sắp xếp lại nó dựa trên một trật tự đầu vào. Nếu có một chức năng NumPy gọi arrange, nó sẽ làm như sau:

newarray = np.arrange(array, [1, 0, 3, 4, 2]) 
print newarray 

    [20, 10, 40, 50, 30] 

Chính thức, nếu mảng được sắp xếp lại là mxn, và "chỉ số" mảng là 1 xn, thứ tự sẽ được xác định bởi mảng được gọi là "chỉ mục".

Numpy có chức năng như thế này không?

Trả lời

23

Bạn chỉ có thể sử dụng "chỉ số" danh sách của bạn trực tiếp, như, tốt, một mảng chỉ mục:

>>> arr = np.array([10, 20, 30, 40, 50]) 
>>> idx = [1, 0, 3, 4, 2] 
>>> arr[idx] 
array([20, 10, 40, 50, 30]) 

Nó có xu hướng để được nhanh hơn nhiều nếu idx đã là một ndarray và không phải là một list, mặc dù nó sẽ hoạt động theo một trong hai cách:

>>> %timeit arr[idx] 
100000 loops, best of 3: 2.11 µs per loop 
>>> ai = np.array(idx) 
>>> %timeit arr[ai] 
1000000 loops, best of 3: 296 ns per loop 
+2

Cảm ơn! Nếu "chỉ số" là mảng 2d thì sao? Ví dụ tôi muốn biến '[[1,2], [" a "," b "]' thành '[[2,1], [" a "," b "]]' bằng cách sử dụng chỉ mục '[ [1,0], [0,1]] '. Tôi biết một cách xấu xí để làm là sử dụng for-loop để sắp xếp lại mỗi hàng của mảng bằng cách sử dụng hàng tương ứng của mảng chỉ mục. Nhưng phải có một cách nhanh hơn. – Skywalker326

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