Я пытаюсь создать сценарий, который будет принимать файл .GTiff в качестве входного аргумента, а затем извлекать некоторую информацию из файла, чтобы создать файл stats.txt, который даст мне classID, дробное покрытие и общее число пикселей этого classID.
Пока что я считаю, что у меня есть все, что мне нужно, но я продолжаю сталкиваться с одной и той же ошибкой, и мои попытки исправить ее не оказались очень плодотворными.
#!/usr/bin/env python
import sys
import calendar
import os
import gdal
import numpy as np
from scipy.stats import mode
from IPython import embed
GDAL2NUMPY = { gdal.GDT_Byte : np.uint8,
gdal.GDT_UInt16 : np.uint16,
gdal.GDT_Int16 : np.int16,
gdal.GDT_UInt32 : np.uint32,
gdal.GDT_Int32 : np.int32,
gdal.GDT_Float32 : np.float32,
gdal.GDT_Float64 : np.float64,
gdal.GDT_CInt16 : np.complex64,
gdal.GDT_CInt32 : np.complex64,
gdal.GDT_CFloat32 : np.complex64,
gdal.GDT_CFloat64 : np.complex128
}
#Open the original training data .tif map file.
fname = sys.argv[1]
lc_dataset = gdal.Open(fname)
lc = lc_dataset.ReadAsArray()
lc = np.array(lc)
#Calculating total number of pixels with a valid Land Cover ID.
fill_value = 0
number_of_pixels = np.where(lc != fill_value)[0].shape[0]
#Get the number of classes and corresponding IDs.
lc_classes = np.unique(lc)
#Split each class into its contituante pixel and write result to file.
for classID in range(1, lc_classes):
lc_class_pixels = np.where(lc == classID)[0].shape[0]
FractionalCover = lc_class_pixels/number_of_pixels
f.write(classID, FractionalCoverage, lc_class_pixels)
f.close()
Когда я запускаю это, он запускает следующую трассировку:
Traceback (most recent call last):
File "GeneratingLCstats.py", line 45, in <module>
for classID in range(1, lc_classes):
TypeError: only size-1 arrays can be converted to Python scalars
Я попытался внести несколько изменений, так как уверен, что ошибка связана с пустыми данными и взаимодействиями с собственными данными Python, но преобразование всех моих массивов в пустые и попытка переформатировать код оказалось тщетной ошибкой сохраняется.
Если кто-нибудь может предложить исправление, которое будет весьма признательно!
Спасибо.