Преобразование переменной земли netcdf в широту и долготу с помощью 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» - это двумерный массив, содержащий информацию «океан = 0» или «земля = 1». Действительно, количество наземных точек соответствует длине моего «наземного» 1D-массива. Однако я не могу понять, как извлечь из него информацию (широта, долгота). Любая помощь приветствуется.

Надеюсь, я сделал свою проблему несколько понятной; У меня нет опыта программирования и / или использования netcdf, поэтому я надеюсь, что вы можете мне помочь! Заранее спасибо!


person DHB    schedule 09.09.2014    source источник


Ответы (2)


Некоторым это может показаться полезным, так что вот ответ на проблему. Друг понял это за меня. «земля» - это индекс уплощенного массива nav_lat, nav_lon, т.е. первая запись «земли» соответствует широте: lat.flat [land [0]] и lon.flat [land [0]].

person DHB    schedule 10.09.2014
comment
Ага, теперь. Вы также можете использовать numpy reshape для преобразования этого сглаженного 1D массив в 2D, чтобы соответствовать массивам широты и долготы. - person N1B4; 10.09.2014

Вы можете извлечь переменные из ncfile, используя

lat = ncfile.variables['nav_lat'][:,:]
lon = ncfile.variables['nav_lon'][:,:] 

Это создаст массивы 2D numpy lat и lon.

person N1B4    schedule 09.09.2014
comment
Привет и спасибо за ответ. Думаю, я неправильно сформулировал свою проблему. Я знаю, как получить широту и долготу, если есть переменные с именами nav_lat и nav_lon. Моя проблема в том, что в моем исходном файле netcdf нет переменных lat и lon, а есть только переменная land, которая является 1D. Мой вопрос: как мне извлечь информацию (широту, долготу) из земли одномерного массива? - person DHB; 10.09.2014