Python 在二维数组中排列值
嗨,基本上我想输入一个2D数组,然后创建一个新的排序数组,其值从最低到最高 我使用的阵列是转换为numpyarray的高程光栅。此数组具有高程值。我只想按海拔排序。下面是我对代码的理解程度,但它并没有生成我想要的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
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
或者其他变量。