Mam zestaw danych rastrowych w formacie ASCII. Za pomocą Pythona muszę określić wartości min
i max
wewnątrz zbioru danych. Powiedziano mi, że informacja w nagłówku jest kluczowa, która zawiera takie rzeczy, jak liczba wierszy / kolumn, rozmiar komórki itp.
Czy nie możesz po prostu pominąć informacji nagłówka i przeczytać cały zestaw danych, aby określić wartości min
i max
?
To właśnie próbuję zrobić. Pomijam pierwsze kilka wierszy, które zawierają informacje nagłówka, i od tego momentu próbuję ustalić wartości. Poniżej znajduje się coś, co mam, ale potrzebuję wskazówek, ponieważ jestem nowy w Pythonie.
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
Jakieś sugestie?
python
statistics
esri-ascii-raster
kaoscify
źródło
źródło
Odpowiedzi:
Możesz użyć numpy. Zobacz przykład poniżej. Można wygenerować tablicę zamaskowaną numpy uwzględniającą wartości bez danych. Zobacz temat pomocy numpy dla mafromtxt i genfromtxt
stamtąd wystarczy po prostu ustalić odpowiednie statystyki
źródło
Chcesz statystyki danych rastrowych.
Najpierw zobacz, co robisz w GUI (na zadanie domowe).
Następnie możesz użyć okna Pythona lub skryptu .
źródło
źródło
AttributeError: 'list' object has no attribute 'split'
data = raster_file.readlines()[4:]
faktycznie nie działa, jeśli chodzi o określenie zakresu. Naprawiłem błąd, który miałem w poprzednim komentarzu. Dokonano tego poprzez dodanienum = data[7]
w 3. linii. Następnie został podzielony za pomocąvalues = num.split()
i był w stanie znaleźć maks / min, ale tylko dla tej konkretnej linii. Jak mogę znaleźć maks./min z całego dokumentu?if check==True
blok, inicjując wartości min / maks. Będziesz chciał zainicjować min do sys.float_info.max i max do sys.float_info.min.Jeśli nie chcesz używać numpy (a naprawdę powinieneś, jest to idealne rozwiązanie do tego typu rzeczy), musisz:
maximum
zmienną na bardzo dużą liczbę ujemną, aminimum
zmienną na bardzo dużą liczbę dodatniąmaximum = max(maximum, max(myfloatlist))
i ekwiwalentu dla minimalnej wartości.źródło
Zrobiłem to innego dnia. Użyłem
arcpy.RasterToNumPyArray
, przekonwertowałem tablicę numpy na listę, a następnie iterowałem moją listę za pomocą zrozumienia listy, aby znaleźć wartości min i maks.źródło
myArray.min()
/myArray.max()
prostsze / szybsze?