12 views (last 30 days)

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.

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)

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

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!