【问题标题】:undefined variable error when variable is defined in the same line在同一行中定义变量时出现未定义变量错误
【发布时间】:2020-05-28 11:15:25
【问题描述】:

当我尝试像这样使用 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]

我收到错误:“消息”:“未定义的变量 'arr'”。

我该怎么做才能解决这个问题?

【问题讨论】:

  • 请显示更多代码。
  • 必须提供minimal reproducible example。您的代码会为 np 抛出 NameError...
  • 用额外的代码行更新了原始帖子
  • 你应该说 "arr" 是全局 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)
  • 你必须将最后 3 行缩进到与arr = ... 行相同的缩进

标签: python numpy variables


【解决方案1】:

至于我,你有错误的缩进,这会造成问题。

# --- 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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 2021-06-03
    • 2020-11-30
    • 2013-08-01
    相关资源
    最近更新 更多