嗨,基本上我想输入一个二维数组,然后创建一个新的排序数组,其值从最低到最高。
我使用的数组是转换为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!
答案 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)