首页 > 解决方案 > Matlab:使用矩阵的滑动窗口

问题描述

我需要一些关于如何编程的信息sliding window of matrix

B我有一个如下定义的对角矩阵:

在此处输入图像描述

我想从给定的矩阵B和窗口的大小中推断出W不同的矩阵,t范围从1L矩阵的大小。

注意:每个窗口具有相同的宽度和高度。并且窗口在对角线上移动。

示例:我们有一个带有大小的矩阵,5 by 8窗口的大小3 by 4在对角线上移动。该示例的矩阵B为:

在此处输入图像描述

我的代码:

% Sliding window matrix

B = [ 1 1 0 0 0 0 0 0
      2 2 1 1 0 0 0 0
      0 0 2 2 1 1 0 0
      0 0 0 0 2 2 1 1
      0 0 0 0 0 0 2 2];    % Matrix B

W = 4;                     % Size of the window wanted here is 4             
n = size(B,2) - W + 1;
X = zeros(size(B,1),W*n);

k = W-1:-1:0;
for i = 1:n  
    window = B(:,i:i+W-1)';
    X(:,i*W - k) = B(:,i:i+W-1);
end 
window;

W = 4andn的 for 循环设置为1我得到:

window = [1 2 0 0 0
          1 2 0 0 0
          0 1 2 0 0
          0 1 2 0 0];

而我应该得到:

window = [1 1 0 0 
          2 2 1 1 
          0 0 2 2];

使用我的代码,我并没有完全得到通过滑动窗口获得的不同子矩阵。

我希望我的程序能够根据我的矩阵B和维度的选择window返回表示 的对角矩阵window并移动一步以恢复与前一个相同的下一个对角矩阵,依此类推直到最后。

有什么建议么?

标签: arraysmatlabmatrixsliding-window

解决方案


您需要单独指定窗口尺寸。尝试这个:

B = [ 1 1 0 0 0 0 0 0
    2 2 1 1 0 0 0 0
    0 0 2 2 1 1 0 0
    0 0 0 0 2 2 1 1
    0 0 0 0 0 0 2 2];

[bh, bw] = size(B); % matrix size
wh = 3; % window height
ww = 4; % window width
sx = 2; % sliding step length along 2nd dim
sy = 1; % sliding step length along 1st dim
wx = 1:sx:(bw-ww+1); % window left
wy = 1:sy:(bh-wh+1); % window top
n = min(numel(wx), numel(wy)); % number of windows which fit in matrix

for ii = 1:n
    X = B((1:wh)+wy(ii)-1, (1:ww)+wx(ii)-1)
end

在此处输入图像描述

请注意,如您的问题中所述,滑动窗口不一定访问整个矩阵对角线。除非您根据矩阵的尺寸计算sx和。sy

B = randi(3, [8 13])
[bh, bw] = size(B); % matrix size
wh = 3; % window height
ww = 4; % window width
sx = 3; % slideing step length along 2nd dim
sy = 1; % slideing step length along 1st dim

在此处输入图像描述


推荐阅读