嗨,基本上我想输入一个二维数组,然后创建一个新的排序数组,其值从最低到最高。
我使用的数组是海拔值的 numpy 数组。下面是我对代码的了解,但它没有生成我想要的!
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!
这样的事情怎么样:
>>> 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]])
对此不太满意,可能有更好的方法。
为此您需要
scipy.stats.rankdata
from scipy.stats import rankdata
ranks=rankdata(a).reshape(a.shape)
要从最高到最低排名,请反转输入 a
ranks=rankdata(a.max()-a).reshape(a.shape)