2013-06-20 6 views
0

У меня возникают проблемы с получением python 2.7 для выполнения этой формулы. Его цель - преобразовать значения Landsat 7 DN в значения отражения. b1 ссылается на изображение band1 TIFF.Неподдерживаемый тип (ы) операнда в формуле

L_B1 = float(((LMax_B1 - LMin_B1)/(QCALMax_B1 - QCALMin_B1)) * (b1 - QCALMin_B1) + LMin_B1) 

Сообщение об ошибке я получаю это:

Runtime error 
Traceback (most recent call last): 
    File "<string>", line 1, in <module> 
TypeError: unsupported operand type(s) for -: 'unicode' and 'unicode' 

Это, как представляется, не нравится -/*. Я импортировал математику.

Любая помощь будет оценена по достоинству.

ответ

1

Для меня это похоже на то, что вы работаете со строками, то есть либо одна из ваших переменных, как LMax_B1 и т. Д. Является строкой unicode или, возможно, все из них. Вы должны преобразовать их в числа с плавающей точкой (или то, что они являются) первым, то есть изменение:

LMax_B1 - LMin_B1 

в

float(LMax_B1) - float(LMin_B1) 

ли так аналогично для всех других переменных. Кстати, вам не нужно импортировать математику для операторов + - * /. Они всегда доступны и работают как ожидалось, если вы работаете с цифрами. Математика требуется для более продвинутых функций, таких как sin и т. Д.

+0

Привет, Йоханнес, справа мои переменные были строками, но я поменял их на флоат при их создании. Я сделал так, как вы сказали относительно добавления float, но я получаю TypeError: float() аргумент должен быть строкой или числом – Simon

+0

Возможно, не все ваши переменные являются строками unicode. Не могли бы вы просто напечатать все переменные или даже лучше: тип печати (QCALMax_B1)? –

+0

Результат - тип float. Однако b1 - это список. [u'LE71460402013077PFS00_B1.TIF '] Так вот в чем проблема. B1 должен ссылаться на изображение полосы 1, на которое я хочу выполнить вычисления. Я не знаю, как это сделать. Должен ли я использовать другой модуль? – Simon

Смежные вопросы