Eu tenho um conjunto de dados raster no formato ASCII. Usando Python, preciso determinar os valores min
e max
dentro do conjunto de dados. Foi-me dito que as informações do cabeçalho são essenciais, que contêm itens como número de linhas / colunas, tamanho da célula e etc.
Você não pode simplesmente pular as informações do cabeçalho e ler o conjunto de dados inteiro para determinar os valores min
e max
?
É isso que estou tentando fazer. Estou pulando as duas primeiras linhas que contêm as informações do cabeçalho e tentando determinar os valores a partir daí. A seguir, é uma espécie do que tenho, mas preciso de algumas orientações, pois sou novo no 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
Alguma sugestão?
python
statistics
esri-ascii-raster
kaoscify
fonte
fonte
Respostas:
Você pode usar numpy. Veja o exemplo abaixo. Uma matriz mascarada numpy pode ser gerada, contabilizando os valores sem dados. Consulte o tópico de ajuda numpy para mafromtxt e genfromtxt
a partir daí, é simplesmente uma questão de determinar as estatísticas que você deseja
fonte
Você deseja estatísticas de dados raster.
Veja o que você está fazendo na GUI primeiro (para trabalhos de casa).
Então você pode usar uma janela python ou um script .
fonte
fonte
AttributeError: 'list' object has no attribute 'split'
data = raster_file.readlines()[4:]
realmente não funciona quando se trata de especificar o intervalo. Corrigi o erro que estava tendo no comentário anterior. Isso foi feito adicionandonum = data[7]
a terceira linha. Ele foi dividido usandovalues = num.split()
e conseguiu encontrar o máximo / min, mas apenas para essa linha específica. Como posso encontrar o máximo / min de todo o documento?if check==True
bloco inicializando seus valores mínimo / máximo. Você deseja inicializar min para sys.float_info.max e max para sys.float_info.min.Se você não deseja usar o numpy (e realmente deve, é perfeito para esse tipo de coisa), será necessário:
maximum
variável para um número negativo muito grande e suaminimum
variável para um número positivo muito grandemaximum = max(maximum, max(myfloatlist))
e um equivalente para o valor mínimo.fonte
Eu fiz isso outro dia. Eu usei
arcpy.RasterToNumPyArray
, converti a matriz numpy em uma lista e, em seguida, iteramos na minha lista por meio de uma compreensão da lista para encontrar os valores mínimo e máximo.fonte
myArray.min()
/myArray.max()
mais simples / mais rápido?