2013-02-14 34 views
6

I'am đang sử dụng gọn gàng và có một mảng (loại ndarray) có chứa một số giá trị. Hình dạng của mảng này 1000x1500. Tôi định hình lại nóPython, mảng sắp xếp gọn gàng

brr = np.reshape(arr, arr.shape[0]*arr.shape[1]) 

khi tôi cố gắng

brr.reverse() 
AttributeError: ‘numpy.ndarray’ object has no attribute ‘reverse’ 

get lỗi. Tôi có thể sắp xếp mảng này như thế nào?

+0

sắp xếp hoặc đảo ngược? –

+0

bạn đang mong đợi 'reverse()' làm gì? – NPE

+1

Không giải quyết được vấn đề của bạn, nhưng để làm cho mã của bạn trở nên gọn gàng hơn và hiệu quả hơn, bạn có thể sử dụng 'arr.size' thay vì' arr.shape [0] * arr.shape [1] '. – Junuxx

Trả lời

23

Nếu bạn chỉ muốn đảo ngược nó:

brr[:] = brr[::-1] 

Trên thực tế, điều này đảo ngược dọc theo trục 0. Bạn cũng có thể trở lại vào bất kỳ trục khác, nếu mảng có nhiều hơn một.

Để sắp xếp theo thứ tự ngược:

>>> arr = np.random.random((1000,1500)) 
>>> brr = np.reshape(arr, arr.shape[0]*arr.shape[1]) 
>>> brr.sort() 
>>> brr = brr[::-1] 
>>> brr 
array([ 9.99999960e-01, 9.99998167e-01, 9.99998114e-01, ..., 
    3.79672182e-07, 3.23871190e-07, 8.34517810e-08]) 

hay, sử dụng argsort:

>>> arr = np.random.random((1000,1500)) 
>>> brr = np.reshape(arr, arr.shape[0]*arr.shape[1]) 
>>> sort_indices = np.argsort(brr)[::-1] 
>>> brr[:] = brr[sort_indices] 
>>> brr 
array([ 9.99999849e-01, 9.99998950e-01, 9.99998762e-01, ..., 
     1.16993050e-06, 1.68760770e-07, 6.58422260e-08]) 
+0

Không, nó chưa được phân loại, tôi phải sắp xếp nó giảm dần – user2046488

+0

Cảm ơn! Đã cố gắng argsort() không có may mắn. Không biết về [:: - 1] – user2046488

12

Hãy thử điều này cho sắp xếp theo thứ tự giảm dần,

import numpy as np 
a = np.array([1,3,4,5,6]) 
print -np.sort(-a) 
2

Để sắp xếp một mảng 1d trong thứ tự giảm dần, vượt qua ngược = Đúng với sorted. Khi @Erik chỉ ra, sorted trước tiên sẽ tạo một bản sao của danh sách và sau đó sắp xếp lại nó.

import numpy as np 
import random 
x = np.arange(0, 10) 
x_sorted_reverse = sorted(x, reverse=True) 
+5

được sắp xếp sử dụng loại có thể lặp lại của python, trước tiên sẽ sao chép tất cả dữ liệu vào danh sách và sau đó thực hiện sắp xếp ngược lại. Trong khi điều này thực sự dẫn đến việc phân loại ngược lại dữ liệu, nó không làm như vậy một cách gọn gàng, và thường loại bỏ bất kỳ lợi ích nào của việc sử dụng numpy. – Erik

+0

Cảm ơn bạn đã chia sẻ điều này, Erik. Tôi đã thêm nó vào câu trả lời. – rafaelvalle

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