【问题标题】:How to split 3d matrix into sub-2d matrices?如何将 3d 矩阵拆分为子 2d 矩阵?
【发布时间】:2020-05-13 04:23:06
【问题描述】:

我有一个 3d 矩阵 (40 x 32 x 408)。我想像这样将它拆分为单独的矩阵:

1 x 1 x 1(获取第一个维度的第一个值和第二个维度的第一个值,第三个维度的第一个)

1 x 1 x 2(获取第一个维度的第一个值和第二个维度的第一个值,第三个维度的第二个)

1 x 1 x 3(获取第一个维度的第一个值和第二个维度的第一个值,第三个维度的第三个)

...

1 x 1 * 408

成为一个单独的 3d 矩阵。

然后:

1 x 2 x 1(获取第一个维度的第一个值和第二个维度的第二个值)

1 x 2 x 2

1 x 2 x 3

...

1 x 2 x 408

是另一个单独的矩阵;并为所有 32 个值继续此操作。 40 维也类似:

2 x 1 x 1(获取第一个维度的第二个值和第二个维度的第一个值)

2 x 1 x 2

2 x 1 x 3

...

2 x 1 x 408

等等。所以以这种方式(最后),我必须有 40 x 32 = 1280 个单独的 3d 矩阵,它们的第三维从 1 开始并以 408 结束。

Here is the google drive link for downloading my 3d Matrix

更多描述:

这个 3d 矩阵(纬度 x 经度 x 时间)属于名为 GPCC 的气候模型的网格降水。如您所见,它包含 408 个月的数据,涵盖我的案例研究的 1280 个点 (40 x 32)。我想将每个点都视为基于点的数据,并为它们生成 408 个月的数据。因此,每 1280 点拥有 408 个月的数据(假设是降水)。然后我可以在Standardized Drought Analysis Toolbox (SDAT) 中使用它们,这是一个第三方函数,由Amir Aghakouchak 教授在 Matlab 文件交换中提供,用于计算 SPI(标准化降水指数)。

【问题讨论】:

  • 为什么不直接使用mat(1,1,:) 访问第一个矩阵(可能添加squeeze)?你想要得到什么形状的矩阵?
  • 亲爱的@beaker 谢谢你这是一个很好的提及。我应该使用 mat(1,1,:) 然后挤压。非常感谢。我想知道如何为此目的编写一个循环,因为我不是编码员,而且我是 Matlab 新手,不熟悉许多功能。
  • @beaker 我希望结果是一个单元格,其中包含所有输出作为第一行中的单独表格。我尝试为此编写一个 for 循环,但仍然无法编写正确的代码。无论如何,我很高兴,因为您提到了 mat(1,1,:) 和挤压。如果您能帮助编写 for-loop,我将不胜感激。

标签: matlab


【解决方案1】:

当参数dim3 时,您正在描述num2cell 的行为。

C = num2cell(A,3)

会将每个单元格中包含 40×32 矩阵之一的单元格数组分配给 C,其中 A 是原始 3D 矩阵的名称。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-16
    • 2011-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多