0

こんにちは基本的に私は 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

助けてくれてありがとう!

追加の説明:

配列内に含まれるすべての値を最高値から最低値に並べ替えたいが、配列のインデックスと形状は維持したい。

つまり、値が 100 個ある場合、最高値 (標高) はランク 1 で、最低ランクは 100 になります。

4

2 に答える 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]])

これにはあまり満足していません。おそらくもっと良い方法があります。

于 2013-07-23T15:30:43.070 に答える