How to window sliding on matrix column?
이전 댓글 표시
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
Sean de Wolski
2012년 2월 8일
What do you want to do with the window once you have it?
답변 (4개)
Walter Roberson
2012년 2월 8일
0 개 추천
Use blkproc() if your MATLAB still has it.
Andrei Bobrov
2012년 2월 8일
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
2012년 2월 8일
댓글 수: 10
Andrei Bobrov
2012년 2월 8일
Division into separate variables-bad way, instead of individual variables window1,window2,... use B{1},B{2},...
N K
2012년 2월 8일
Andrei Bobrov
2012년 2월 8일
B-cell array that contains 6 matrices of size 3 to 3, what is the matrix of size 1 to 12?
N K
2012년 2월 8일
Andrei Bobrov
2012년 2월 8일
i don't undestand. Please give example for martix with size of (eg) 5x12
N K
2012년 2월 8일
Andrei Bobrov
2012년 2월 8일
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
2012년 2월 8일
see ADD in my answer
Andrei Bobrov
2012년 2월 8일
and see comment by Sean de Wolski
Andrei Bobrov
2012년 2월 8일
what is going on in the process of: | 1 2 3 | -> | x1 |(example) ?
Sukuchha
2012년 2월 8일
0 개 추천
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
카테고리
도움말 센터 및 File Exchange에서 Word games에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!