cube2rect文档

cube2rect函数重塑3D矩阵,以与标准Matlab函数一起使用。

cube2rect支持简单、高效的向量化分析,而不是使用嵌套循环对矩阵的每一行和每一列进行操作。它的补项是rect2cube

回到气候数据工具内容

内容

语法

A2 = cube2rect(A3,mask)

描述

A2 =立方矩形(A3)对于一个三维矩阵A3它的维数对应于空间x空间x时间,cube2rect重塑A3变成二维矩阵A2它的维数对应于时间x空间。

A2 = cube2rect(A3,mask)仅使用二维中与真值对应的网格单元格面具.这个选项可以减少大型数据集的内存需求,在处理过程中可以忽略一些区域(可能是所有陆地或所有海洋网格单元)。

这个函数为什么存在?

好问题!简单的回答是,它可以实现快速和简单的向量化,这意味着没有更多的嵌套循环。在这个例子中可以找到一个更微妙的解释3D数据分析教程

例1a:一个简单的2x2网格

考虑这个2x2网格。在时间1,值略大于100。到时间2,所有的值都增加了100,除了左下网格单元格增加了120。趋势在时间3继续,所有的值都在300的数量级上。数据如下:

%第一次切片:A(:,:,1) = [101 103;102 104);%第二次时间切片:A(:,:,2) = [201 203;222 204);%第三段时间:A(:,:,3) = [301 303;342 304);

许多标准的Matlab函数操作二维矩阵的列,如果我们重塑这些函数,我们可以很容易地使用这些函数一个一个维度对应时间,另一个维度对应空间。以下是重塑的方法一个cube2rect

cube2rect (A)
Ans = 101 102 103 104 201 222 203 204 301 342 303 304

现在每一列都对应一个网格单元一个每一行都对应着时间。是这样的:

S p a c e ----------> t | 101 102 103 104 I | 201 222 203 204 m | 301 342 303 304 e v

例1b:数据的屏蔽区域

如果您希望在大型数据集上执行计算密集型操作,有时可以屏蔽所有不需要分析的网格单元格。例如,如果您有一个高分辨率的全局数据集,其中包含大量随时间变化的测量值,您可能希望使用掩盖陆地区域或海洋区域,只对感兴趣的区域进行分析。使用上面简单的2x2数据集,如果你想在重塑之前屏蔽右上角的网格单元,下面是它的样子一个

掩码= [true false;cube2rect(A,mask)
掩码= 2×2逻辑阵列101 1 ans = 101 102 104 201 222 204 301 342 304

例2:海面温度:

假数据可能让人感觉有点抽象,所以让我们看看如何使用cube2rect有真实的气候数据。

负载pacific_sst

在pacific_sst样本数据集中,我们有一个风场随尺寸变化

大小(sst)
Ans = 60 55 802

对应60个纬度网格单元,55个经度网格单元,802个月解。金宝搏官方网站为了计算每个网格单元的平均海面温度,我们可以指定的第三维风场打电话的时候意思是这样的:

meanSST = mean(sst,3);cmocean imagescn(经度、纬度、meanSST)Cb = colorbar;ylabel (cb、平均海面温度(\circC)

是的,你当然可以很容易地得到平均海面温度,但是cube2rect是为了允许更多的应用程序,而不仅仅是内置的的意思是性病等。让我们用cube2rect来得到平均海表温度的图,就像上面的图一样。首先,重塑3D风场矩阵:

SSTR =立方矩形(sst);大小(sstr)
Ans = 802 3300

现在是重塑sstr矩阵包含802行对应802个时间步,3300列对应60x55的每个网格单元。计算每个网格单元的平均海面温度现在很容易:

my_meanSST_2d = mean(sstr);大小(my_meanSST_2d)
Ans = 1 3300

现在my_meanSST只包含一行——这是3300个网格单元格的单个平均值。要使这些网格单元格恢复到原始形状,请使用rect2cube.这是对的阴cube2rect杨。

my_meanSST_3d = rect2cube(my_meanSST_2d,[60 55 802]);cmocean imagescn(经度、纬度、my_meanSST_3d)Cb = colorbar;ylabel (cb、“平均海面温度”

作者信息

此函数和支持文档由金宝app查德·a·格林德克萨斯大学地球物理研究所(UTIG)。