mask3 documentation

The mask3 applies a mask to all levels of 3D matrix corresponding to a 2D mask.

Back to Climate Data Tools Contents

Contents

Syntax

Am = mask3(A,mask)
Am = mask3(A,mask,repval)

Description

Am = mask3(A,mask) sets all elements along the third dimenion of the 3D matrix A to NaN wherevever there are true elements in the corresponding 2D logical mask.

Am = mask3(A,mask,repval) fills masked elements with a specified value. Default repval is NaN.

Example 1: Set masked values to NaN

Here's some random sample data A which contains 300 time steps of a 100x100 grid. Make a mask and set all the true values in the mask to NaN:

% Gridded time series:
A = rand(100,100,300);

% true wherever sample peaks data exceeds 1:
mask = peaks(100)>1;

% Make A NaN where the mask is true:
Am = mask3(A,mask);

% Plot:
figure
subplot(1,2,1)
imagesc(mask)
colorbar
title 'this is the mask'
axis image

subplot(1,2,2)
imagesc(sum(isfinite(Am),3))
colorbar
title 'number of finite values in Am'
axis image

Example 2: Set masked values to a scalar

Suppose instead you want to set all the masked grid cells to a specific value, like 0.5. Here's how you'd do that:

Am = mask3(A,mask,0.5);

figure
imagesc(mean(Am,3))
colorbar

In the figure above we see that all the true values in the mask are exactly 0.5. Everything else looks like noise because all the other grid cells show the average of 300 random values.

Example 3: Fill masked regions with a grid

Sometimes when you have a gridded time series you want to fill a region not with a single scalar value, but with a corresponding grid of values. For example, for the same mask as above, you might have a grid of replacement values repgrid like this:

repgrid = rot90(peaks(100),1);

figure
subplot(1,2,1)
imagesc(mask)
axis image
title 'this is the mask'

subplot(1,2,2)
imagesc(repgrid)
axis image
title 'this is the replacement grid'

Replace all the masked grid cells in A with the corresponding values in repgrid:

Am = mask3(A,mask,repgrid);

figure
imagesc(mean(Am,3))

Example 4: Surface pressure time series

This example uses data frome the ERA_Interim_2017.nc dataset. (For more on working with .nc files, see the NetCDF Tutorial.) Start by loading the data:

filename = 'ERA_Interim_2017.nc';
lon = ncread(filename,'longitude');
lat = ncread(filename,'latitude');
SP = ncread(filename,'sp');

The surface pressure time series SP has the dimensions

size(SP)
ans =
   480   241    12

which correspond to latitude, longitude, and time.

Let's mask out all the points in SP that correspond to ocean. To do that, make a Lat,Lon grid from the 1d lat,lon arrays and use island to find out which grid cells are land and which ones are ocean.

[Lat,Lon] = meshgrid(lat,lon);

land = island(Lat,Lon);

% ocean is *not* land:
ocean = ~land;

Here's the time-averaged mean of the full dataset:

figure
pcolor(Lon,Lat,mean(SP,3))
shading interp
axis tight
cmocean dense % optional colormap

Now set all ocean grid cells to NaN:

SPm = mask3(SP,ocean);

figure
pcolor(Lon,Lat,mean(SPm,3))
shading interp
axis tight
cmocean dense % optional colormap

Author Info

This function is part of the Climate Data Toolbox for Matlab. The function and supporting documentation were written by Chad A. Greene of the University of Texas at Austin.