How to window sliding on matrix column?
Show older comments
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.
1 Comment
Sean de Wolski
on 8 Feb 2012
What do you want to do with the window once you have it?
Answers (4)
Walter Roberson
on 8 Feb 2012
0 votes
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{:})
ADD
A - your matrix(12x10)
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,[]).'
ADD2
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
ADD3
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)
N K
on 8 Feb 2012
10 Comments
Andrei Bobrov
on 8 Feb 2012
Division into separate variables-bad way, instead of individual variables window1,window2,... use B{1},B{2},...
N K
on 8 Feb 2012
Andrei Bobrov
on 8 Feb 2012
B-cell array that contains 6 matrices of size 3 to 3, what is the matrix of size 1 to 12?
N K
on 8 Feb 2012
Andrei Bobrov
on 8 Feb 2012
i don't undestand. Please give example for martix with size of (eg) 5x12
N K
on 8 Feb 2012
Andrei Bobrov
on 8 Feb 2012
A - your matrix(12x10)
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,[]).'
Andrei Bobrov
on 8 Feb 2012
see ADD in my answer
Andrei Bobrov
on 8 Feb 2012
and see comment by Sean de Wolski
Andrei Bobrov
on 8 Feb 2012
what is going on in the process of: | 1 2 3 | -> | x1 |(example) ?
Sukuchha
on 8 Feb 2012
0 votes
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
Categories
Find more on Word games in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!