三维矩阵的非重叠滑动窗和

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三维矩阵的非重叠滑动窗和相关的知识,希望对你有一定的参考价值。

我遇到以下情况遇到了一些困难:

我有一个名为'ch'的3D矩阵。我想在5个矩阵的组中在z方向上求和并将它们保存到不同的矩阵,'ch_sample',例如ch_sample(:,:,1)= ch(:,:,1)+ ch(:,:,2)... + ch(:,:,5); ch_sample(:,:,2)= ch(:,:,6)+ ch(:,:,7)... + ch(:,:,10)等。

因此,我想获得一个非重叠的滑动窗口(大小= 5)来获取矩阵z方向的和。我需要在ch中保留值的x和y坐标。

我已尝试通过for循环完成此操作并失败。

欢迎任何建议和意见!

谢谢!

答案

首先,你不需要为这个简单的任务显式循环。其次,要使其对大矩阵有效,请使用辅助矩阵:

clear

NumToSum = 5; 

M = randi([0,9],[4,3,10]); %our matrix
cumsumM = cumsum(M,3); %helper matrix. cumulative sum in 3rd dimension
R0 = cumsumM(:,:,1:NumToSum);
R1 = cumsumM(:,:,NumToSum+1:end) - cumsumM(:,:,1:end-NumToSum);
R=cat(3,R0,R1); %the result

disp([M,R]) %display side by side
另一答案

在这里reshapesum可以用来得到结果:

group_size = 5;
s = size(ch);
grp = reshape(ch, s(1)*s(2), group_size, []);    % reshape to form groups
sumgrp = sum(grp, 2);                            % sum of each group calculated
ch_sample = reshape(sumgrp, s(1), s(2),[]);      % reshape back to original dimensions

一体:

ch_sample = reshape(sum(reshape(ch, s(1)*s(2), group_size, []), 2), s(1), s(2),[]);

*注意:reshape是一个非常便宜的操作。

以上是关于三维矩阵的非重叠滑动窗和的主要内容,如果未能解决你的问题,请参考以下文章

使重叠的非悬停元素变暗

D3群在三维实空间中的矩阵表示是怎么算的

片段与另一个片段重叠

如何修复重叠的片段

导航上的片段生命周期重叠

Android从主活动类中的非类布局访问Textview