简体   繁体   中英

Matlab vector to matrix conversion

I want to convert the following vector A into matrix B , best demonstrated by this example:

n = 4;

A = [1 2 3 4 5 6];

B = [ 1 2 3 4;
      2 3 4 5;
      3 4 5 6; ]

I am currently using a loop to achieve this and wondered if it was possible to vectorize it?

Thanks L.

You can use bsxfun -

A(bsxfun(@plus,[0:numel(A)-n]',1:n))

You can also use hankel -

hankel(A(1:n),A(n:end)).'

Sample run -

>> A = [3,4,6,0,1,2]
A =
     3     4     6     0     1     2
>> n
n =
     4
>> A(bsxfun(@plus,[0:numel(A)-n]',1:n))
ans =
     3     4     6     0
     4     6     0     1
     6     0     1     2
>> hankel(A(1:n),A(n:end)).'
ans =
     3     4     6     0
     4     6     0     1
     6     0     1     2

If you have the Signal Processing Toolbox you can also use convmtx :

n = 4;
A = [1 2 3 4 5 6];

m = numel(A)-n;
B = flipud(convmtx(A,m+1));
B = B(:,m+1:end-m);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM