Python Netcfd4 NameError: name 'lat_array' is not defined
Python Netcfd4 NameError: name 'lat_array' is not defined
我试图启动示例 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 never defined!
原来是原来的Programmer忘记改成lat_target
了。所以它基本上是 lat_target
而不是 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 never defined!
原来是原来的Programmer忘记改成lat_target
了。所以它基本上是 lat_target
而不是 lat_array
。