0

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

我使用的数组是转换为 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 级!

4

2 回答 2

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

对此不太满意,可能有更好的方法。

于 2013-07-23T15:30:43.070 回答
1

你需要scipy.stats.rankdata这个

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

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

ranks=rankdata(a.max()-a).reshape(a.shape)
于 2018-10-31T01:11:48.827 回答