【问题标题】:Creating/converting a new 4D matrix with data from another 4D matrix使用来自另一个 4D 矩阵的数据创建/转换一个新的 4D 矩阵
【发布时间】:2019-07-10 01:06:42
【问题描述】:

我有一个这样定义的矩阵:height(:,:,:,:)。四个维度是“纬度、经度、高度和时间”。具体来说,我试图让这个 4D 变量能够显示以米为单位的实际高度,而不是当前的表达形式,即所谓的大气层(包括其下方的总高度)的总高度。每个纬度、经度和时间组合的高度都是不同的,没有标准的“层高”。

当调用高度变量时,它显示指定网格单元的“顶部”高度,但它们是相加的。例如,如果网格单元 1 的高度为 40m,而网格单元 2 的高度为 42 米,则调用网格单元 2 将得到 82m 的值。我想更改它,以便存储的值是

我试图创建一个 for 循环,对于每个点,调用层高并减去它之前层的高度,只给出被调用层的高度。像这样:

h=0;
for index = 2:27
    for space = 1:26
        h = h + flheight(:,:,index,:) - flheight(:,:,space,:)
    end
end

虽然目前我收到的震级“4.2961e+05”的错误值......但除了我自己以外的每个人都可能很明显这是为什么。

当我拨打这个号码时,我期望的值大约是“32”米。

另外,我的矩阵看起来只有一个高度维度(维度 3)而不是预期的 27(这可能与我的输出的巨大尺寸有关)。

完成此操作后,我计划手动将顶层的高度添加到以某种方式创建的矩阵中,但这是另一个步骤。现在我正在尝试获取层 2->27 的单个高度。

编辑

所以:这是来自 flheight 的示例数据片段的格式。实际上每个维度的长度是 flheight(336,264,27,25) 但对于这个例子,我将制作一个精简版本。

flheight(1,1,:,1) 大概是:

[ 40 
  82
  124
  169]

基本上,每个纬度、经度和时间组合有 27 个高度。而不是显示总高度,我希望它取代高度差异(如评论所述!)。 我正在尝试使变量“h”转换为以下内容:

[ 40
  42
  42
  45 ]

此外,对于每个高度和时间组合,都有一个 336x264 矩阵。

【问题讨论】:

  • 不明白。我认为您想获得沿维度 3(高度)的 flheight 值之间的差异?喜欢ouput = diff(flheight,1,3);?一个最小的、完整的和可验证的示例将有所帮助(显示一小部分的数据和预期结果)。
  • @Brice 感谢您的反馈。我会继续尝试使用一小部分数据进行编辑并简化我的问题
  • @Brice 我已经修改了(希望)一个更好的例子来说明我的预期变化。
  • @Brice 我想我设法解决了!我意识到了我的问题,但感谢您用 cmets 推动我前进!

标签: arrays matlab for-loop matrix


【解决方案1】:

所以,我解决了它……至少大部分都解决了!

我的结束代码是:

for index = 2:27
    h(:,:,index,:) = flheight(:,:,index,:) - flheight(:,:,index-1,:);
end

我的问题是我只是说:

h= ...

但我需要说的是:

h(:,:,index,:) = ...

所以我实际上是在更改高度维度内的索引!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-13
    • 1970-01-01
    • 2020-07-01
    相关资源
    最近更新 更多