Повторная привязка глобальных матриц данных к общей сетке в Matlab - PullRequest
0 голосов
/ 26 июня 2018

У меня есть несколько 2D матриц / наборов данных (файлы .mat в Matlab), соответствующих различным свойствам океана (например, глубина воды), в глобальных сетках. Каждая сетка имеет разное разрешение, но все сетки единообразны, зарегистрированы узлами, и отсутствуют пропущенные данные (кроме ячеек, представляющих землю, которые зарегистрированы как «NaN»). Я хотел бы перенастроить их на общую зарегистрированную узлом сетку с разрешением 0,25 °, поэтому матрица [1441 x 721] (долгота x широта).

Набор данных1: в настоящее время разрешение 2/3 ° [541 x 271]. Это должно быть преобразовано в более высокое разрешение (0,25 °, [1441 x 721]).

Набор данных2: текущее разрешение 0,1 ° [3601 x 1801]. Это должно быть преобразовано в более низкое разрешение (0,25 °, [1441 x 721]).

У меня уже есть подходящая маска суши и океана с желаемым разрешением (0,25 ° [1441 x 721]), которую я могу наложить после того, как наборы данных были повторно сеткой. Однако операция повторного построения сетки / интерполяции должна каким-то образом учитывать береговые линии, на которых будут присутствовать как наземные («NaN»), так и океанические (числовые значения) ячейки.

Большое спасибо за любую помощь или предложения, как это сделать.

1 Ответ

0 голосов
/ 27 июня 2018

Ответ от Джонаса на MatlabAnswers (https://www.mathworks.com/matlabcentral/answers/407564-re-gridding-global-data-matrices-onto-a-common-grid-in-matlab?s_tid=mlc_ans_email_ques)

Вы можете пересчитать свои данные, используя griddedinterpolant. Кажется, он игнорирует NaN, что хорошо в этом случае.

Пример:

%original 2D-dataset with some NaNs
V=peaks(100);
[x,y]=ndgrid(1:100,1:100);
V(50:60,50:60)=NaN;
%make interpolant from original data  
F = griddedInterpolant(x,y,V)
%desired resolution
[xi,yi]=ndgrid(1:3:100,1:3:100);
%plot
figure;
subplot(1,2,1)
mesh(x,y,V)
subplot(1,2,2)
mesh(xi,yi,F(xi,yi))

Можно, конечно, указать и метод интерполяции.

...