【问题标题】:How to sum 3d Matrix row by interval in Matlab?如何在 Matlab 中按间隔对 3d 矩阵行求和?
【发布时间】:2019-06-21 15:53:52
【问题描述】:

我在 Matlab 中有一个由 M = ones(36,256,2232) 创建的 36x256x2232 3d 矩阵,我想通过间隔 3 的总和行来减小矩阵的大小。结果矩阵应该是 12x256x2232 并且每个单元格都应该有值3.

我尝试使用 reshapesum 函数,但得到 1x256x2232 矩阵。

不使用for-loop 怎么办?

【问题讨论】:

  • 如果你重塑为第四维(长度为 3),那么sum 可以正常工作。如果您的实际实现没有常量值,那么确保正确的值位于正确的位置可能会更棘手

标签: matlab matrix


【解决方案1】:

您可以使用新的ISH splitapply函数(类似于987654323 @但可以处理具有多个维度的数据)。即使行数不是组大小的倍数,此方法也是如此:

M = ones(4,5,2); % example data
n = 3; % group size
result = splitapply(@(x)sum(x,1), M, floor((0:size(M,1)-1).'/n)+1);

【讨论】:

    【解决方案2】:

    应该这样做:

    M = ones(36,256,2232)
    reduced = reshape(sum(reshape(M, 3,[], 256,2232), 1),[], 256, 2232);
    
    • reshape 用给定的间隔创建一个 4d 矩阵
    • sum减少它
    • 第二次 reshape 再次将其转换为 3d

    您也可以使用squeeze,它会删除单件维度:

    reduced = squeeze(sum(reshape(M, 3,[], 256,2232), 1));
    

    【讨论】:

    • 像魅力一样工作!我终于得到了 4d 矩阵。但是现在,我怎样才能从简化矩阵传递到 12-256-2232 3d 矩阵?
    • 找到解决方案:使用squeeze(reduced)我得到结果!谢谢。
    • 如果有问题,请考虑采纳!
    猜你喜欢
    • 1970-01-01
    • 2016-10-27
    • 1970-01-01
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 2013-02-16
    • 2014-12-20
    相关资源
    最近更新 更多