Преобразовать переменную netcdf "land" в широту и долготу с помощью Python
У меня есть глобальный набор метеорологических данных, и я хочу получить доступ к данным для определенной сетки (широта, долгота). Однако данные сжимаются, т.е. интересующие параметры имеют не размеры (широта, долгота), а "земля". "земля" - это одномерный массив целых чисел.
Я импортировал файл в Python, используя
import scipy.io.netcdf as netcdf
path = '/path/.../ncfile.nc'
ncfile = netcdf.netcdf_file(path,'r')
Затем я проверил, какие были переменные, и обнаружил, что, например, переменная "Rainf" имеет размеры (tstep, land). Я исследовал это в Интернете и нашел файл landmask_gswp.nc ( http://dods.ipsl.jussieu.fr/gswp/Fixed/landmask_gswp.nc), который должен содержать информацию, которая мне нужна, то есть, как извлекать информацию (лат, лон) из "земли". Этот файл содержит переменные nav_lat, nav_lon и landmask. nav_lat и nav_lon соотносят, насколько я понимаю, координаты переменных x и y с широтой и долготой. "landmask" - это двумерный массив, содержащий информацию "Ocean = 0" или "land = 1.". Действительно, количество точек совпадает с длиной моего "land" 1D массива. Тем не менее, я не могу понять, как извлечь из него (лат,lon) информацию. Любая помощь приветствуется.
Я надеюсь, что сделал мою проблему несколько понятной; У меня нет опыта в программировании и / или использовании netcdf, поэтому я надеюсь, что вы можете помочь! Заранее спасибо!
2 ответа
Некоторые другие могут найти это полезным, так что вот ответ на проблему. Друг понял это для меня. "land" - это индекс уплощенного массива nav_lat, nav_lon, т.е. первая запись "land" соответствует широте: lat.flat[land[0]] и lon.flat[land[0]].
Вы можете извлечь переменные из ncfile
с помощью
lat = ncfile.variables['nav_lat'][:,:]
lon = ncfile.variables['nav_lon'][:,:]
Это создаст двумерные массивы lat
а также lon
,