2016-06-14 3 views
1

Когда я пытаюсь использовать ComputeBandStats, для завершения требуется очень много времени. Есть ли способ ускорить процесс?ComputeBandStats чрезвычайно медленный

Вот мой код:

inIMG = gdal.Open(infile) 
bandas = [inIMG.GetRasterBand(b+1) for b in range(3)] 
print('hej1') 
meanSD = [b.ComputeBandStats(1) for b in bandas] 
print('hej2') 

Он печатает «hej1» довольно быстро, но это только пишет «hej2» через несколько часов. Поэтому кажется, что проблема ComputeBandStats.

Я пробовал его без параметров (работал в более раннюю дату) и с 1, но это, похоже, не имеет никакого значения.

(Я использую Python 2.7 и GDAL 1.11.3)

+0

Возможно ли, что она занимает очень много времени? вы пробовали вывести понимание списка в простой цикл 'for', чтобы отслеживать прогресс? –

+0

Это действительно закончилось через несколько часов. Есть ли способ ускорить процесс? –

+0

Ваш лучший выбор, вероятно, заключался бы в многопроцессорности, разбивке задачи на несколько меньших задач. Насколько велики данные, с которыми вы работаете? Кроме того, если файл img действительно большой, попробуйте его с меньшим тестовым примером, чтобы узнать, ускорится ли процесс. –

ответ

0

я узнал, что ComputeStatistics гораздо быстрее, чем ComputeBandStats, поэтому я использую его вместо этого. Я точно не знаю, в чем разница, но ComputeStatistics, помимо преимущества скорости, также игнорирует значения без данных, что оказалось проблемой для ComputeBandStats. Он также вычисляет min, max, mean и std, которые мне все необходимы.

Это изменение, которое я сделал:

inIMG = gdal.Open(infile) 
bandas = [inIMG.GetRasterBand(b+1) for b in range(3)] 
print('hej1') 
stats = [b.ComputeStatistics(False) for b in bandas] 
print('hej2')