# How to window sliding on matrix column?

8 views (last 30 days)
N K on 8 Feb 2012
Edited: Ronaldo on 4 Oct 2013
Sorry for my weak English.
Dear all. I'am new in MATLAB, so I need your help.
I have some problem about how to write code for window sliding.
I have some matrix for example
1 2 3 4 5 6 7 8
9 1 2 3 4 5 6 7
8 9 1 2 3 4 5 6
So, I want to get group by window sliding like
(example. window size is 3 and overlap by 1 column)
group1 group2 group3 group4 .....
1 2 3 2 3 4 3 4 5 4 5 6 .....
9 1 2 1 2 3 2 3 4 3 4 5 .....
8 9 1 9 1 2 1 2 3 2 3 4 .....
Could you mind if I want you to show the code for solve this problem?
Best.
Sean de Wolski on 8 Feb 2012
What do you want to do with the window once you have it?

Walter Roberson on 8 Feb 2012
Use blkproc() if your MATLAB still has it.

Andrei Bobrov on 8 Feb 2012
eg:
EDIT
A= [1 2 3 4 5 6 7 8
9 1 2 3 4 5 6 7
8 9 1 2 3 4 5 6]
m = 3;
h = hankel(1:m,m:size(A,2))
B = arrayfun(@(i1)A(:,h(:,i1)),1:size(h,2),'un',0)
group = cat(3,B{:})
Bmatrix = cat(2,B{:})
m = 3;
[a,b] = size(A);
At = A.';
out = reshape(At(bsxfun(@plus,hankel(1:m,m:b),...
permute(0:b:b*(a-1),[1 3 2]))),(b-m+1)*m,[]).'
m = 3;
n = size(A,2) - m +1;
out = zeros(size(A,1),m*n);
k = 2:-1:0;
for i1 = 1:n
out(:,i1*m - k) = A(:,i1:i1+m-1);
end
for example, your process is the summation
A= [1 2 3 4 5 6 7 8
9 1 2 3 4 5 6 7
8 9 1 2 3 4 5 6]
m = 3;
h = hankel(1:m,m:size(A,2))
B = arrayfun(@(i1)sum(A(:,h(:,i1)),2),1:size(h,2),'un',0)
Bmatrix = cat(2,B{:})
or
B = colfilt(A,[1 3],'sliding',@sum)
out = B(:,2:end-1)
##### 2 CommentsShowHide 1 older comment
Andrei Bobrov on 8 Feb 2012
Bmatrix = cat(2,B{:})

N K on 8 Feb 2012
Than I have other problems now.
from
m = 3;
h = hankel(1:m,m:size(A,2))
B = arrayfun(@(i1)A(:,h(:,i1)),1:size(h,2),'un',0)
group = cat(3,B{:})
data will be in group. Than, I try to get data in each group to each variable
by create new variable in for loop like
[Bw,Bl]=size(B);
for loop = 1:1:Bl
window(loop) = B{1,loop};
end
But system doesn't let me do it. I want data in full matrix in each window.
How does to store each matrix in each variable ?
Best.
Andrei Bobrov on 8 Feb 2012
what is going on in the process of: | 1 2 3 | -> | x1 |(example) ?

Sukuchha on 8 Feb 2012
use function nlfilter which is similar to blockproc which operates in a block but unlike blockproc its a sliding block window.
for mor info, doc nlfilter