J'ai un jeu de données raster au format ASCII. En utilisant Python, j'ai besoin de déterminer les valeurs min
et max
à l'intérieur de l'ensemble de données. On m'a dit que les informations d'en-tête sont essentielles, qui contiennent des éléments comme le nombre de lignes / colonnes, la taille des cellules, etc.
Vous ne pouvez pas simplement ignorer les informations d'en-tête et lire l'ensemble de données complet pour déterminer les valeurs min
et max
?
Voilà ce que j'essaie de faire. J'ignore les deux premières lignes qui contiennent les informations d'en-tête et j'essaie de déterminer les valeurs à partir de là. Ce qui suit est en quelque sorte ce que j'ai, mais j'ai besoin de quelques conseils car je suis nouveau sur Python.
raster_file = open('data.asc', 'r') # Open the file
data = raster_file.readlines()[4:] # Read the lines in the file, and skip the first six lines
for lines in data:
print max(data) # Find the max value in data
print min(data) # Find hte min value in data
Aucune suggestion?
python
statistics
esri-ascii-raster
kaoscify
la source
la source
Réponses:
Vous pouvez utiliser numpy. Voir l'exemple ci-dessous. Un tableau masqué numpy peut être généré en tenant compte des valeurs sans données. Voir la rubrique d'aide numpy pour mafromtxt et genfromtxt
à partir de là, il s'agit simplement de déterminer les statistiques que vous souhaitez
la source
Vous voulez des statistiques de données raster.
Voyez d'abord ce que vous faites dans l'interface graphique (pour les devoirs.)
Ensuite, vous pouvez utiliser une fenêtre python ou un script .
la source
la source
AttributeError: 'list' object has no attribute 'split'
data = raster_file.readlines()[4:]
ne fonctionne pas vraiment quand il s'agit de spécifier la plage. J'ai corrigé l'erreur que je rencontrais dans le commentaire précédent. Cela a été fait en ajoutantnum = data[7]
à la 3e ligne. Il a ensuite été divisé en utilisantvalues = num.split()
et a pu trouver le max / min, mais uniquement pour cette ligne particulière. Comment puis-je trouver le max / min dans tout le document?if check==True
bloc en initialisant vos valeurs min / max. Vous voudrez initialiser min en sys.float_info.max et max en sys.float_info.min.Si vous ne voulez pas utiliser numpy (et vous devriez vraiment le faire, c'est parfait pour ce genre de chose), alors vous devrez:
maximum
variable à un très grand nombre négatif et votreminimum
variable à un très grand nombre positifmaximum = max(maximum, max(myfloatlist))
et un équivalent pour la valeur minimale.la source
Je viens de le faire l'autre jour. J'ai utilisé
arcpy.RasterToNumPyArray
, converti le tableau numpy en liste, puis parcouru ma liste via une compréhension de liste pour trouver les valeurs min et max.la source
myArray.min()
/myArray.max()
plus simple / plus rapide?