Python, numpy排序数组

7

我正在使用numpy,并且有一个数组(ndarray类型),其中包含一些值。这个数组的形状是1000x1500。我对其进行了重新塑形。

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

当我尝试时...
brr.reverse()
AttributeError: ‘numpy.ndarray’ object has no attribute ‘reverse’

出现了错误。 我该如何对这个数组进行排序?


你期望 reverse() 做什么? - NPE
2
虽然不能解决你的问题,但是为了让你的代码更整洁、更高效,你可以使用 arr.size 代替 arr.shape[0]*arr.shape[1] - Junuxx
我想按降序排序。顺便说一句,sort() 函数会出现相同的错误。 - user2046488
3个回答

30
如果您只是想将其反转:
brr[:] = brr[::-1]

实际上,这会沿着轴0反转。如果数组有多个轴,您也可以在任何其他轴上进行反转。

要按相反顺序排序:

>>> 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])

或者,使用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])

不,它是未排序的,我必须按降序排序。 - user2046488
谢谢!尝试使用argsort()但没有成功。不知道[::-1]的用法。 - user2046488
brr = np.sort(brr)[::-1] - Nirmal

16

尝试这个方法来按降序排序,

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

4
要将一维数组按降序排序,将reverse=True传递给sorted。 正如@Erik指出的那样,sorted首先会复制列表,然后按相反顺序排序。
import numpy as np
import random
x = np.arange(0, 10)
x_sorted_reverse = sorted(x, reverse=True)

6
sorted使用Python的可迭代对象排序,它会先将所有数据复制到一个列表中,然后进行反向排序。虽然这确实导致了数据的反向排序,但在NumPy中并没有这样做,通常会消除使用NumPy的任何好处。 - Erik
谢谢分享,Erik。我已将其添加到答案中。 - rafaelvalle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接