У меня есть набор растровых данных в формате ASCII. Использование Python, мне нужно , чтобы определить min
и max
значение в наборе данных. Мне сказали, что информация заголовка является ключом, который содержит такие вещи, как количество строк / столбцов, размер ячейки и т. Д.
Разве вы не можете просто пропустить информацию заголовка и прочитать весь набор данных , чтобы определить min
и max
значение?
Это то, что я пытаюсь сделать. Я пропускаю первые пару строк, которые содержат информацию заголовка, и пытаюсь определить значения с этого момента. Ниже приведено то, что у меня есть, но мне нужно некоторое руководство, поскольку я новичок в 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
Какие-либо предложения?
python
statistics
esri-ascii-raster
kaoscify
источник
источник
Ответы:
Вы можете использовать NumPy. Смотрите пример ниже. Может быть сгенерирован пустой массив с учетом значений данных. Смотрите раздел справки numy для mafromtxt и genfromtxt
оттуда просто определить статистику, которую вы хотите
источник
Вы хотите статистику растровых данных.
Сначала посмотрите, что вы делаете в графическом интерфейсе (для домашней работы.)
Тогда вы можете использовать окно Python или скрипт .
источник
источник
AttributeError: 'list' object has no attribute 'split'
data = raster_file.readlines()[4:]
самом деле не работает, когда дело доходит до определения диапазона. Я исправил ошибку, которая была у меня в предыдущем комментарии. Это было сделано путем добавленияnum = data[7]
в 3-й строке. Затем он был разделен с помощьюvalues = num.split()
и смог найти максимум / мин, но только для этой конкретной линии. Как я могу найти максимум / мин из всего документа?if check==True
блок, инициализируя ваши минимальные / максимальные значения. Вы хотите инициализировать min для sys.float_info.max и max для sys.float_info.min.Если вы не хотите использовать NumPy (и вам действительно следует, это идеально подходит для такого рода вещей), то вам необходимо:
maximum
переменную очень большим отрицательным числом, аminimum
переменную - очень большим положительным числомmaximum = max(maximum, max(myfloatlist))
и эквивалент для минимального значения.источник
Я только что сделал это на днях. Я использовал
arcpy.RasterToNumPyArray
, преобразовал массив NumPy в список, а затем перебрал свой список через понимание списка, чтобы найти минимальное и максимальное значения.источник
myArray.min()
/myArray.max()
проще / быстрее?