【问题标题】:Sea Ice data - MATLAB 3D matrix海冰数据 - MATLAB 3D 矩阵
【发布时间】:2013-06-12 16:05:56
【问题描述】:

我想制作一个矩阵,其中数据在矩阵中,我可以将矩阵中的每个网格拉出作为某个长的纬度点。数据持续了 3 年以上,所以我还需要第三维作为时间。

我现在拥有的是三个 1437x159 双倍的纬度、经度和海冰数据。如何将它们组合成符合我上面提到的标准的 3d 矩阵?基本上,我想说,我想要第 47 天的 -50S lat 和 50W lon 的数据,并且能够索引到数组中并找到答案。

谢谢!

【问题讨论】:

  • cat(3, lat, long, sea_ice) 怎么样?
  • 问题是我的海冰数据每天都是不同的矩阵。我还需要能够索引到特定的一天。
  • 那我不明白你的数据是怎么存储的。你能以某种方式想象它吗?
  • 我有大约 1000 个 hdf 文件,其中包含一个名为 ASI Ice Concentration 的变量。每个文件对应于当天全球每个点(纬度、经度)的海冰数据。在代码的另一部分,我循环读取每天的冰浓度数据——所以我最终得到了大约 1000 组覆盖世界的数据。我需要按照您上面的建议进行操作,但也可以指定我需要的日期。基本上,我在想象一个立方体,其中矩阵是所有这些天的数据。每个网格将对应于某个纬度、经度,例如 1S 和 1W。但在网格中将是数据。

标签: matlab multidimensional-array


【解决方案1】:

是的 - 这可以毫不费力地完成。我在跨时间分析大气数据方面做过类似的工作。

根本问题是您的数据按小时组织,网格随时间动态变化,您需要随时间分析数据。我会推荐两种方法之一。

方法 1:网格重采样

这涉及在统一的标准化网格上重新采样网格数据。使用 Matlab ndgrid() 函数定义网格,然后使用 interp2() 重新采样每个点,并连接成一个统一的 3D 矩阵。然后,您可以使用interp3() 在此重新采样的数据中直接插值。这种方法涉及最少的编程,但在重新采样过程中会丢失一些原始数据。

方法 2:动态插值

围绕您的数据对象定义一个自定义类包装器,例如“SeaIce”,然后编写您自己的SeaIce.interp3() 方法。该方法将加载每小时的网格信息,首先在横向维度执行插值,然后在时间维度执行插值。这确保不会因插值而丢失任何信息,但需要权衡更多编码。

在我的出版物“航空应用中的风分析”中详细描述了第二种方法(针对风领域)。 Slides available here.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-04
    • 2013-09-21
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    • 1970-01-01
    相关资源
    最近更新 更多