2013-02-14 79 views
6

我使用numpy并且有一个包含一些值的数组(ndarray类型)。这个阵列的形状为1000x1500。我重新塑造它Python,numpy排序数组

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

,当我试图

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

出现错误。 我如何分类这个数组?

+0

sort or reverse? – 2013-02-14 12:52:02

+0

你期待'reverse()'做什么? – NPE 2013-02-14 12:52:17

+1

不能解决你的问题,但为了让你的代码更整洁有效,你可以使用'arr.size'而不是'arr.shape [0] * arr.shape [1]'。 – Junuxx 2013-02-14 12:59:43

回答

23

如果你只是想扭转这种局面:

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

不,它是未排序的,我必须对其进行排序 – user2046488 2013-02-14 13:10:45

+0

谢谢!尝试argsort()没有运气。不知道[:: - 1] – user2046488 2013-02-14 13:36:42

12

尝试此以降序的方式排序,

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

排序在一维数组降序排列,传递reverse = True至sorted。 由于@Erik指出,sorted将首先制作列表的副本,然后对其进行反向排序。

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

排序使用python的迭代排序,它将首先将所有数据复制到列表中,然后进行相反的排序。虽然这确实会导致数据的反向排序,但它在numpy中并不这样做,并且通常会消除使用numpy的任何好处。 – Erik 2015-07-22 18:56:30

+0

谢谢你分享,Erik。我将它添加到答案中。 – rafaelvalle 2016-11-24 22:37:07