首页 > 解决方案 > Python Netcfd4 NameError:未定义名称“lat_array”

问题描述

我试图启动一个示例 python 脚本,从 NetCDF4 (.nc) 文件中读取数据,但是当我尝试运行代码时,它给了我一个错误,说名称 lat_array 未定义。该代码是:

#!/usr/bin/python
#=========================================================
from netCDF4 import Dataset
import numpy as np
import matplotlib.pyplot as plt
#=========================================================
#            SET TARGET DATA
#=========================================================
day=1
lat_target=45.0
lon_target=360-117.0
#=========================================================
#             SET OPENDAP PATH
#=========================================================
pathname = 'http://thredds.northwestknowledge.net:8080/thredds/dodsC/agg_macav2metdata_huss_BNU-ESM_r1i1p1_historical_1950_2005_CONUS_daily.nc'
#=========================================================
#             GET DATA HANDLES
#=========================================================
filehandle=Dataset(pathname,'r',format="NETCDF4")
lathandle=filehandle.variables['lat']
lonhandle=filehandle.variables['lon']
timehandle=filehandle.variables['time']
datahandle=filehandle.variables['specific_humidity']
#=========================================================
#             GET DATA
#=========================================================
#get data
time_num=len(timehandle)
timeindex=range(day-1,time_num,365)  #python starts arrays at 0
time=timehandle[timeindex]
lat = lathandle[:]
lon = lonhandle[:]
#=========================================================
#find indices of target lat/lon/day
lat_index = (np.abs(lat-lat_array)).argmin()
lon_index = (np.abs(lon-lon_array)).argmin()
#check final is in right bounds
if(lat[lat_index]>lat_target):
    if(lat_index!=0):
        lat_index = lat_index - 1
if(lat[lat_index]<lat_target):
    if(lat_index!=len(lat)):
        lat_index =lat_index +1
if(lon[lon_index]>lon_target):
    if(lon_index!=0):
        lon_index = lon_index - 1
if(lon[lon_index]<lon_target):
    if(lon_index!=len(lon)):
        lon_index = lon_index + 1
lat=lat[lat_index]
lon=lon[lon_index]
#=========================================================
#get data
data = datahandle[timeindex,lat_index,lon_index]
#=========================================================
#              MAKE A PLOT
#=========================================================
yearref=1950
years = np.arange(yearref,yearref+len(time))
fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_xlabel(u'Year')
ax.set_ylabel(u'Specific Humidity')
ax.set_title(u'Specific Humidity on Day %d ,\n %4.2f\u00b0N, %4.2f\u00b0W' % (day,lat, abs(360-lon)))
#ax.plot_date(x=time,y=data,fmt="b-")
ax.ticklabel_format(style='plain')
ax.plot(years,data,'b-')
plt.savefig("myPythonGraph.png")
plt.show()

在第 35 行:

#find indices of target lat/lon/day
lat_index = (np.abs(lat-lat_array)).argmin()

它说未定义 lat_array,但在示例中,从未定义过 lat_array!

标签: pythonnetcdf4

解决方案


原来,原来的程序员忘记把它改成lat_target. 所以它基本上lat_target是代替lat_array.


推荐阅读