ошибка неопределенной переменной, когда переменная определена в той же строке - PullRequest
0 голосов
/ 28 мая 2020

Когда я пытаюсь настроить массив, используя Numpy, например:

def Landcover_Crops_nr(polygons):
    dataset = ee.Image("USGS/GFSAD1000_V0").clip(polygons)
    type_crop = dataset.select("landcover")
    arr = np.array(type_crop)
values, frequencies= np.unique(arr, return_counts=True)
sum = np.sum(frequencies)
percentages = [x/sum*100 for x in frequencies]

, я получаю сообщение об ошибке: «message»: «Undefined variable 'arr'».

What cam я делаю, чтобы исправить это?

1 Ответ

0 голосов
/ 28 мая 2020

Что касается меня, у вас неправильные отступы, и это создает все проблемы.

# --- function ---

def Landcover_Crops_nr(polygons):
    dataset = ee.Image("USGS/GFSAD1000_V0").clip(polygons)
    type_crop = dataset.select("landcover")
    arr = np.array(type_crop)
    values, frequencies = np.unique(arr, return_counts=True)
    sum = np.sum(frequencies)
    percentages = [x/sum*100 for x in frequencies]

# --- outside function ---

Но если отступы в порядке, вы должны знать, что функция создает локальную переменную arr, и она не существует снаружи функция.

Вам нужно будет использовать global arr, чтобы сообщить функции, которую вы хотите назначить внешней / глобальной переменной. И не забудьте выполнить эту функцию перед тем, как использовать внешнюю функцию arr.

# --- function ---

def Landcover_Crops_nr(polygons):
    global arr

    dataset = ee.Image("USGS/GFSAD1000_V0").clip(polygons)
    type_crop = dataset.select("landcover")
    arr = np.array(type_crop)

# --- outside function ---

Landcover_Crops_nr(polygons)  # execute function to create variable `arr`

values, frequencies= np.unique(arr, return_counts=True)
sum = np.sum(frequencies)
percentages = [x/sum*100 for x in frequencies]

Но лучше использовать return arr - это будет более читабельно. И присвоить результат внешнему arr

# --- function ---

def Landcover_Crops_nr(polygons):
    dataset = ee.Image("USGS/GFSAD1000_V0").clip(polygons)
    type_crop = dataset.select("landcover")
    arr = np.array(type_crop)

    return arr    

# --- outside function ---

arr = Landcover_Crops_nr(polygons)  # execute function to get local `arr` and assign to global `arr`

values, frequencies= np.unique(arr, return_counts=True)
sum = np.sum(frequencies)
percentages = [x/sum*100 for x in frequencies]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...