在2D数组中排名

时间:2013-07-23 15:27:32

标签: python sorting numpy ranking arcpy

嗨,基本上我想输入一个二维数组,然后创建一个新的排序数组,其值从最低到最高。

我使用的数组是转换为numpyarray的高程栅格。此数组具有高程值。我只想按高程排序。下面是我使用代码的距离,但它没有产生我想要的东西!

import arcpy
import numpy

array = arcpy.RasterToNumPyArray(r"C:\Current\SedMod\SedModv3\TestModel.gdb\Smallprepfin_Clip")

order = array.argsort()
ranks = order.argsort()

print ranks

感谢您的帮助!

补充说明:

我想将数组中包含的所有值从最高值排序到最低值,但保持数组的索引和形状。

,如果有100个值,则最高值(海拔)将为1级,最低级别为100!

2 个答案:

答案 0 :(得分:2)

这样的事情怎么样:

>>> a
array([[ 0.76303184,  0.17748702,  0.89365504,  0.07221609],
       [ 0.12267359,  0.56999037,  0.42877407,  0.8875015 ],
       [ 0.38178661,  0.57648393,  0.47056551,  0.03178402],
       [ 0.03606595,  0.93597727,  0.02199706,  0.73906879]])
>>> a.ravel().argsort().argsort().reshape(a.shape)
array([[12,  5, 14,  3],
       [ 4,  9,  7, 13],
       [ 6, 10,  8,  1],
       [ 2, 15,  0, 11]])

对此并不十分满意,可能有更好的方法。

答案 1 :(得分:0)

您需要scipy.stats.rankdata

from scipy.stats import rankdata
ranks=rankdata(a).reshape(a.shape)

要从最高到最低排名,请反转输入a

ranks=rankdata(a.max()-a).reshape(a.shape)