【问题标题】:Creating 2D matrix from the "cut" of a 3D matrix从 3D 矩阵的“切割”创建 2D 矩阵
【发布时间】:2016-06-08 16:30:22
【问题描述】:

我有一个 3D 矩阵 ch4_global 180 by 360 by 452(纬度乘经度乘时间)。我想从 3D 矩阵的切割中创建一个 2D 矩阵。切割矩阵是大小为 451 x 1 的 2D 矩阵 (id)。我需要每次使用 id 切割 ch4_global (180x360)。

id=find(Latitude<=-10.5 & Latitude>=-20.5 & Longitude<=-35.5 & Longitude>=-75.5);

所以,我想要:

co(:,time)=ch4_global(id,time)

【问题讨论】:

  • 如果 ch4_global 是 3D,那么它是如何工作的:ch4_global(id,time)?而id 不是二维矩阵,它是一个向量。你的问题不清楚
  • @IGOR - 请提供一个小数字示例说明您想要做什么(例如使用 3x3x3 矩阵)。另外,为什么idsize(ch4_global,3) 短?

标签: matlab multidimensional-array


【解决方案1】:

squeeze 将为您解决问题。

A = rand(180,360,452);
B = squeeze(A(:,:,1));

【讨论】:

  • 嗨,Adrian,但 no 被视为矩阵“id”。
  • @IGOR 不是我在写你的代码。阅读我链接的文档并研究我提供的示例并编写代码。 squeeze 切出高维矩阵切片的方法。
【解决方案2】:

从您问题中给出的示例(和数组大小)来看,我假设您正在使用 [elevation &lt;=&gt; θ &lt;=&gt; latitude, azimuth &lt;=&gt; φ &lt;=&gt; longitude] 球坐标约定:

...并且数组中的位置对应于适当的角度(度数)。出于这个原因,我认为你可以通过简单的子数组索引来获得你想要的:

cut_ch4_global = ch4_global( (-20:-11)+90, (-75:-35)+180, :);

请注意,结果仍然是一个 3D 数组,但现在它只包含您感兴趣的 lat/lng(如果我的假设正确的话)。

对于任何“off-by-1”错误,我提前道歉。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 2016-05-11
    • 1970-01-01
    相关资源
    最近更新 更多