#python #numpy
#питон #тупица
Вопрос:
На данный момент я просто пытаюсь построить области, где видимость составляет менее 1 мили, и присвоить ей значение видимости 2, а затем, когда видимость составляет менее 10 миль, присвоить ей значение видимости 5. Эта идея идеально подходит для моего порыва ветра (gst), но когда я строю свои визиты, они строятся неправильно, и я знаю, что мой массив (nvis) правильный, потому что, когда я строю его, я получаю правильные цифры, но затем, когда я пытаюсь построить свой визит, он показывает изображение, показанное ниже. Я могу сказать, что что-то не так с моим np.shape
или np.where
потому что, когда я изменяю значения, такие как (nvis lt; 10 или nvis Я попытался переключиться по порядку мои nvis lt; 10 и nvis
Кто-нибудь знает, что я делаю неправильно, потому что это должно работать идеально, так как я следую почти тому же процессу, что и мой gst.
############# Imports from datetime import datetime, timedelta import requests import metpy.calc as mpcalc from metpy.units import units import urllib.request import xarray as xr import matplotlib import matplotlib.pyplot as plt from shapely import geometry import numpy as np ###########Time Stamps run_dt = datetime.utcnow()-timedelta(hours=2) # previous hour fhr = '00' fhr1 = '01' run = run_dt.strftime('%H') ymd = run_dt.strftime('%Y%m%d') ##########Wind Data Import # Data download url = 'https://nomads.ncep.noaa.gov/cgi-bin/filter_rap.pl?file=rap.t{run}z.awp130 pgrbf{fhr}.grib2amp;lev_0-6000_m_above_ground=onamp;lev_surface=onamp;var_GUST=onamp;var_VIS=onamp;var_VUCSH=onamp;var_VVCSH=onamp;leftlon=0amp;rightlon=360amp;toplat=90amp;bottomlat=-90amp;dir=/rap.{ymd}' URL = url.format(run=run, fhr=fhr, ymd=ymd) r = requests.get(URL) with open('/home/jupyter-kfa5169/FDI/wind.grib00', 'wb') as fh: fh.write(r.content) ds = xr.open_dataset('/home/jupyter-kfa5169/FDI/wind.grib00', engine='cfgrib') lon, lat = ds.longitude.values-360., ds.latitude.values gust = mpcalc.smooth_gaussian((ds.variables['gust'].values*units('m/s')).to('mph').magnitude, 4) visab = mpcalc.smooth_gaussian((ds.variables['vis'].values*units('m')).to('mile').magnitude, 4) #vshear = ds.variables['vvcsh'] #ushear = ds.variables['vucsh'] ################## Makes The Levels for Visability nvis = np.copy(visab) vis = np.ones(nvis.shape) vis = np.where(nvis lt; 5, 5, vis) vis = np.where(nvis lt; 10, 2, vis) ################## Makes The levels Gusts ngust = np.copy(gust) gst = np.ones(ngust.shape) gst = np.where(ngust gt; 40, 3, gst) gst = np.where(ngust gt; 50, 4, gst) gst = np.where(ngust gt; 60, 7, gst) ################################# url = 'https://nomads.ncep.noaa.gov/cgi-bin/filter_rap.pl?file=rap.t{run}z.awp130pgrbf{fhr1}.grib2amp;lev_surface=onamp;var_ASNOW=onamp;var_FROZR=onamp;var_FRZR=onamp;leftlon=0amp;rightlon=360amp;toplat=90amp;bottomlat=-90amp;dir=/rap.{ymd}' URL = url.format(run=run, fhr1=fhr1, ymd=ymd) r = requests.get(URL) with open('/home/jupyter-kfa5169/FDI/wind.grib01', 'wb') as fh: fh.write(r.content) ds1 = xr.open_dataset('/home/jupyter-kfa5169/FDI/wind.grib01', engine='cfgrib') vis = mpcalc.smooth_gaussian((ds1.variables['asnow'].values*units('m')).to('inch').magnitude, 4) frz = ds1.variables['frzr'] ############################# PLOT #################### fig = plt.figure(figsize=(12,10)) ax = fig.add_subplot(111) cs = ax.contourf(lon, lat, vis, levels=[0,1,2,3,4,5,6,7,10,15]) ## EDIT CONTOUR LEVELS HERE plt.colorbar plt.show()
Изображение моего вывода:
Image of output when I replace the vis with nvis for contourf and keep the same contour levels:
Ответ №1:
Глядя на ваш код, основная проблема заключается в том, что имя vis
привязывается к новым данным.
vis = mpcalc.smooth_gaussian((ds1.variables['asnow'].values*units('m')).to('inch').magnitude, 4)
Переход на другое имя, скажем,
asnow = ...
кажется, я понимаю: Кроме того, я думаю, вам захочется исправить вот так.
vis = np.where(nvis lt; 10, 5, vis) vis = np.where(nvis lt; 5, 2, vis)
Затем мы получаем: Я рекомендую вам использовать отладчик Python для мониторинга обработки данных и обнаружения подобных ошибок.