Mehr

Bestimmen des Anteils von Rasterzellen, die jeden Wert aus der Liste für viele Raster im Rasterstapel enthalten?

Bestimmen des Anteils von Rasterzellen, die jeden Wert aus der Liste für viele Raster im Rasterstapel enthalten?


Ich habe eine Funktion geschrieben, um den Anteil der Rasterpixel zu bestimmen, die jeden einer Liste von Werten enthalten, die mich interessieren würden. Ich habe dann eine Funktion geschrieben, um die vorherige Funktion auf ein 3D-Numpy-Array anzuwenden. Ich würde gerne wissen, wie dies verbessert werden kann und ob es einfacher wäre, eine solche Funktion auf eine Liste von Rasterdateien anzuwenden, als ein numpy-Array zu erstellen.

Ein Testarray und Beispielwerte:

import numpy as np test_arr = np.random.randint(0, 200, 200).reshape(2,10,10) values ​​= [test_arr[1][1][1], test_arr[0][0][0 ]]

Hier meine Funktionen:

def pixel_props(rast, values): """Diese Funktion gibt eine Liste mit den Anteilen der gesamten Rasterpixel aus, die jeden Wert enthalten.""" prop_list = [] size = float(rast.size) for i in values: temp_count = np.count_nonzero(rast[rast == i]) prop_list.append(temp_count/size) return prop_list def raster_props(array, no_data): """Dies wendet die pixel_props-Funktion auf eine Reihe von Ebenen in einem numpy 3D-Array an """ master_matrix = [[]] master_matrix.append(no_data) für Layer im Array: master_matrix.append(pixel_props(layer, no_data)) return master_matrix

Wenn Sie auf Speicherprobleme stoßen, ist es in der Tat eine gute Idee, die einzelnen Rasterdateien zu durchlaufen, anstatt alle auf einmal zu lesen.

So bewerben Sie sichpixel_propsFunktion in ein Verzeichnis von Rasterbildern durch nacheinander lesen mit rasterio. Dies setzt voraus, dass jedes Bild ein einschichtiges GeoTiff in einem Ordner ist.

import os import glob import rasterio def pixel_props(rast, values): """Diese Funktion gibt eine Liste mit den Anteilen der gesamten Rasterpixel aus, die jeden Wert enthalten.""" prop_list = [] size = float(rast.size) für Wert in Werten: count = np.sum(rast == value) prop_list.append(count/size) return prop_list # eine Liste für den Speicherort jedes GeoTiff erstellen tif_dir = "/geo/tiff/folder" tif_list = sortiert( glob.glob(os.path.join(tif_dir, "*.tif"))) # Liste der Werte, die Sie interessieren val_list = [1, 2, 3] # Schleife über die Bilder und berechne die pixel_props-Ergebnisse = [] für tif_file in tif_list: mit rasterio.open(tif_file, 'r') als tif: tif_arr = tif.read() results.append(pixel_props(tif_arr, val_list))

Da Sie auch in einem anderen Thread gefragt haben, wie diese Ergebnisse dargestellt werden sollen, ist dies ein Beispiel für eine MODIS-Qualitätsschicht-Zeitreihe, wobei 1 Randdaten, 2 Schnee und Eis und 3 Wolkenbedeckung bedeutet.

from matplotlib importiere pyplot als plt plt.figure(figsize=(11,7)) für i, val in enumerate(val_list): plt.plot(np.array(results)[:,i], label="value %s " % val) plt.legend(loc="oben rechts") plt.show()


Schau das Video: absolute Häufigkeit u0026 relative Häufigkeit. Wahrscheinlichkeit - einfach erklärt. Lehrerschmidt