2013-07-23 37 views
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!

+0

你想结果是一维数组吗? – hivert

+0

附加说明: 我想将数组中包含的所有值从最高值排序到最低值,但保持数组的索引和形状。 即,如果有100个值,则最高值(海拔)将是1级,最低级别100! –

回答

1

怎么是这样的:

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

不是超级满意这一点,有可能是一个更好的办法。

+0

附加说明: 我想将数组中包含的所有值从最高值排序到最低值,但保持数组的索引和形状。 即,如果有100个值,则最高值(海拔)将是1级,最低级别100! –

+0

所以对于你的数组我最终会得到类似于:array([[14,13,15,7], [2,12,1,16], [5,6,11,3], [ 4,9,8,10]]) –

+0

嗯我似乎无法得到它的工作,你可以写下这样的代码:import arcpy import numpy 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]]) sorted_array = numpy.ravel的(a).argsort() .argsort()。reshape(a.shape) print sorted_ar射线 –