convert Vector into matrix ?

Hello, i need to convert a vector into matrix like this:
A = [1 2 3 4 5]
into
B=[1 2 3; 2 3 4; 3 4 5]
Any ideas ??

 Respuesta aceptada

Youssef  Khmou
Youssef Khmou el 24 de Mayo de 2013

1 voto

hi Alex
This is not conversion but you are adding new elements to the original vector :
If you have a vector of size Mx1 you can convert it to matrix using function reshape to get a matrix of size PxN such M=P*N.
r=randn(100,1);
y=reshape(r,10,10);
In your case , try :
A=1:5;
t=1;
r=3;
for n=1:3
B(n,:)=t:n+2;
t=t+1;
r=r+1;
end

3 comentarios

Alex
Alex el 24 de Mayo de 2013
Editada: Alex el 24 de Mayo de 2013
thank you ! I was trying to avoid the for, but i think is impossible, My final code is
N=32;
A=0:2*N-2;
t=A(1);
r=N-1;
for n=0:r
B(n+1,:)=t:N-1+n;
t=t+1;
end
Mohammed Ghouse Mohiuddin
Mohammed Ghouse Mohiuddin el 31 de Mzo. de 2021
For loops are too complex for me. I hate it. Nobody explains it to me in a logical way.
Image Analyst
Image Analyst el 31 de Mzo. de 2021
@Mohammed Ghouse Mohiuddin, uncommented code (like Alex's) can be hard to understand. Everyone should use comments. If you can't figure it out, post a new question with the code you are trying to adapt and an explanation of what you really want to do (if you could adapt it). But read this link first.

Iniciar sesión para comentar.

Más respuestas (6)

Image Analyst
Image Analyst el 24 de Mayo de 2013

0 votos

I know it seem really really obvious, but if that is all we have to go on (i.e. no indication that it needs to be generalized in any way), then why not just do this:
B = [A(1:3);A(2:4);A(3:5)]

1 comentario

Alex
Alex el 24 de Mayo de 2013
i am sorry, my mistake, A is big, it was just an example, exist other way to make this automatic ??

Iniciar sesión para comentar.

Matt Kindig
Matt Kindig el 24 de Mayo de 2013
Editada: Matt Kindig el 24 de Mayo de 2013

0 votos

It might not be very efficient, but I think it should work:
nc = 3; %number of columns in B
nc = nc-1;
c = 1:(length(A)-nc);
B = cell2mat(cellfun(@(n) A(n:(n+nc)), num2cell(c(:)), 'uni', false))
Youssef  Khmou
Youssef Khmou el 25 de Mayo de 2013

0 votos

hi, there are other alternatives , :
try :
N=32;
A=1:N;
A2=0:N-1;
A2=A2';
B=repmat(A,N,1);
for x=1:N
B(:,x)=B(:,x)+A2;
end
Youssef  Khmou
Youssef Khmou el 25 de Mayo de 2013

0 votos

hi,
here is the best solution without using loops :
N=32;
A=1:N;
B=repmat(A,N,1);
A2=(0:N-1)';
B2=repmat(A2,1,N);
C=B+B2;
anukriti dureha
anukriti dureha el 25 de Mayo de 2013

0 votos

hi alex, you can do this:
i=1;
ind=0;
num=3;
while num <=5
ind=ind+1;
z{i}=A(ind:num);
num=num+1;
i=i+1;
end
z=cell2mat(x);b=vec2mat(z,3);
Stephen23
Stephen23 el 31 de Mzo. de 2021
A = [1,2,3,4,5];
B = hankel(A(1:3),A(3:5))
B = 3×3
1 2 3 2 3 4 3 4 5

Categorías

Más información sobre Creating and Concatenating Matrices en Centro de ayuda y File Exchange.

Preguntada:

el 24 de Mayo de 2013

Respondida:

el 31 de Mzo. de 2021

Community Treasure Hunt

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

Start Hunting!

Translated by