Matlab:使用矩阵滑动window

Matlab : Sliding window using a matrix

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

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

我想从给定的矩阵 B 和 window W 的大小推导出 t 的不同矩阵,范围从 1到矩阵的大小 L

注意:每个window的宽高是一样的。 window 沿对角线移动。

示例:我们有一个大小为5 by 8的矩阵,window的大小为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;

将 for 循环的 W = 4n 设置为 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];

使用我的代码,我无法准确地得到通过滑动 window.

获得的不同子矩阵

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

有什么建议吗?

您需要单独指定 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

请注意,如您的问题中所述,滑动 window 不一定会访问整个矩阵对角线。除非你根据矩阵的维度计算sxsy

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