2013-07-23 62 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射線 –