Python 在二维数组中排列值

Python 在二维数组中排列值,python,sorting,numpy,ranking,arcpy,Python,Sorting,Numpy,Ranking,Arcpy,嗨,基本上我想输入一个2D数组,然后创建一个新的排序数组,其值从最低到最高 我使用的阵列是转换为numpyarray的高程光栅。此数组具有高程值。我只想按海拔排序。下面是我对代码的理解程度,但它并没有生成我想要的 import arcpy import numpy array = arcpy.RasterToNumPyArray(r"C:\Current\SedMod\SedModv3\TestModel.gdb\Smallprepfin_Clip") order = array.argso

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

我使用的阵列是转换为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
谢谢你的帮助

补充澄清:

我想对数组中包含的所有值进行排序,从最高值到最低值,但要保持数组的索引和形状


i、 e最高值(标高)为1级,如果有100个值,则最低值为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]])

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

像这样的方法怎么样:

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

为此,您需要
scipy.stats.rankdata

from scipy.stats import rankdata
ranks=rankdata(a).reshape(a.shape)
要从最高到最低排列,请反转输入a

ranks=rankdata(a.max()-a).reshape(a.shape)

您希望结果是1D数组吗?附加说明:我希望对数组中包含的所有值进行排序,从最高值到最低值,但保留数组的索引和形状。i、 e最高值(标高)为1级,如果有100个值,则最低值为100级!您希望结果是1D数组吗?附加说明:我希望对数组中包含的所有值进行排序,从最高值到最低值,但保留数组的索引和形状。i、 e最高值(标高)为1级,如果有100个值,则最低值为100级!补充说明:我想对数组中包含的所有值进行排序,从最高值到最低值,但保留数组的索引和形状。i、 e最高值(标高)为1级,如果有100个值,则最低值为100级!所以对于你的数组,我最终会得到这样的结果:数组([[14,13,15,7],[2,12,1,16],[5,6,11,3],[4,9,8,10]])嗯,我似乎无法让它工作。你能用这样的代码编写它吗: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])已排序的数组=numpy.ravel(a.argsort().argsort().argsort().argsort().argsort().reforme(a.shape)打印已排序的数组>>a[[0.76303184,0.17748702,0.89364,1609],[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().reforme(a.shape)回溯(最近一次调用):文件“”,第1行,在AttributeError中:“list”对象没有属性“ravel”。您需要将列表列表转换为numpy数组。
array=numpy.array(array)
。在此说明中,我不会命名数组
array
可能
arr
或其他变量。其他说明:我希望将数组中包含的所有值从最高值排序到最低值,但保留数组的索引和形状。即最高值(高程)如果有100个值,则排名1,最低排名100!因此对于您的数组,我将以如下方式结束:数组([[14,13,15,7],[2,12,1,16],[5,6,11,3],[4,9,8,10]])hmm我似乎无法让它工作。您可以这样编写代码: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])已排序的数组=numpy.ravel(a.argsort().argsort().argsort().reforme(a.shape)打印已排序的数组>>[[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().reforme(a.shape)回溯(最近一次调用):文件“”,第1行,在AttributeError中:“list”对象没有属性“ravel”,您需要将list列表转换为numpy数组。
array=numpy.array(array)
。在此说明中,我不会命名数组
array
或者其他变量。