arrays - Matlab:使用矩阵的滑动窗口
问题描述
我需要一些关于如何编程的信息sliding window of matrix
。
B
我有一个如下定义的对角矩阵:
我想从给定的矩阵B
和窗口的大小中推断出W
不同的矩阵,t
范围从1
到L
矩阵的大小。
注意:每个窗口具有相同的宽度和高度。并且窗口在对角线上移动。
示例:我们有一个带有大小的矩阵,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 = 4
andn
的 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
并移动一步以恢复与前一个相同的下一个对角矩阵,依此类推直到最后。
有什么建议么?
解决方案
您需要单独指定窗口尺寸。尝试这个:
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
推荐阅读
- css - Material UI IconButton outline none 不起作用
- powershell - 在 power shell 中设置和显示环境变量
- php - 无法在没有 Web 服务器的情况下链接 HTML 中的脚本源
- python - 使用元类而不是工厂模式
- python - 如何根据python函数中的注释来转换参数值?
- java - mockMvc 断言内容为空(内容不是 json)
- asp.net - 如何从asp.net中的url获取用户名值
- sql - 带有过滤器组列的 Postgresql SUM
- excel - 如何修复 excel VBA 中的运行时错误“91”?
- javascript - 如何在反应中将数据从父组件传递到子组件?