对二维数组中的值进行排名,保留数组形状和索引

问题描述 投票:0回答:2

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

我使用的数组是海拔值的 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!

python sorting numpy ranking arcpy
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]])

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


1
投票

为此您需要

scipy.stats.rankdata

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

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

ranks=rankdata(a.max()-a).reshape(a.shape)
© www.soinside.com 2019 - 2024. All rights reserved.