How to combine multiple nx1 size of matrix into one matrix

As topic mentioned, i want to combine a matrix from many nx1 size matrix, i would like to have a script
Many Thnkas, Alex

3 comentarios

Can you explain with an example?
NG
NG el 12 de Ag. de 2014
For example, I got matrix A, A=[1;2;3], and B, B=[4;5;6;7]. I want to combine them to be matrix C, C=[1;2;3;4;5;6;7], but now i got many matrix with differnet number of rows. How can i combine them ? Thanks!
Hi! You can reference my code! Good lucky! >> a{1} = [1 1 1;1 1 1]; >> a{1}
ans =
1 1 1
1 1 1
>> a{2} = [2 2 2;2 2 2]; >> a{3} = [3 3 3]; >> a{4} = [4 4 4;4 4 4;4 4 4]; >> a{5} = [5 5 5;5 5 5]; >> A = vertcat(a{:})
A =
1 1 1
1 1 1
2 2 2
2 2 2
3 3 3
4 4 4
4 4 4
4 4 4
5 5 5
5 5 5

Iniciar sesión para comentar.

 Respuesta aceptada

could you plz exlpain more about vertcat(matrices{:}); by showing an example.
>> matrices={[1,2;3 4],[5,6;7,8]};
>> vertcat(matrices{:})
ans =
1 2
3 4
5 6
7 8

6 comentarios

NG
NG el 12 de Ag. de 2014
Sorry, i want to clarify that now i am using a loop to generate matrices out and then store them into a new matrix .Can i still use vertcat?
Matt J
Matt J el 12 de Ag. de 2014
Editada: Matt J el 12 de Ag. de 2014
Yes, store the i-th vector to matrices{i} in the loop and then when the loop is finished, use vertcat as above.
NG
NG el 12 de Ag. de 2014
However, Matlab appears this one (In an assignment A(:) = B, the number of elements in A and B must be the same.) , how can i fix it ?
Matt J
Matt J el 12 de Ag. de 2014
Editada: Matt J el 12 de Ag. de 2014
Sounds like you are not using cell array indexing. If you don't know what that means, you have some reading to do I'm afraid,
NG
NG el 12 de Ag. de 2014
Ok! Thanks !
The first step to fix it is to show the code which is throwing this error ;-)

Iniciar sesión para comentar.

Más respuestas (3)

Joakim Magnusson
Joakim Magnusson el 12 de Ag. de 2014
Editada: Joakim Magnusson el 12 de Ag. de 2014
Where do you have your matrices? If you can get them into cell arrays like this:
matrices = cell(1,2);
matrices{1} = A;
matrices{2} = B;
C = [];
Then you could do like this:
for i = 1:size(matrices,2)
C = [C ;cell2mat(matrices(i))]
end
I'm not sure how you want to combine your matrices but hope this was at least a little helpful.

4 comentarios

If A, B, ... are in a cell array, you wouldn't merge them by a loop but rather by cell2mat(matrices').
Matt J
Matt J el 12 de Ag. de 2014
Editada: Matt J el 12 de Ag. de 2014
cell2mat.m does use a loop. You could use vertcat, which is a builtin optimized function,
C=vertcat(matrices{:});
NG
NG el 12 de Ag. de 2014
Matt , could you plz exlpain more about vertcat(matrices{:}); by showing an example. Thank You!
Thanks @Matt, I didn't use cell2mat a lot, so I didn't think about it too much. Your solution is very elegant.

Iniciar sesión para comentar.

Joakim Magnusson
Joakim Magnusson el 12 de Ag. de 2014
Editada: Joakim Magnusson el 12 de Ag. de 2014
Sorry, i want to clarify that now i am using a loop to generate matrices out and then store them into a new matrix .Can i still use vertcat?
NG, do you mean like this?
B = [];
for i = 1:10
A = magic(4);
A(:, 2:4) = [];
B = vertcat(B, A);
end

2 comentarios

That would not be recommendable. With B growing inside the loop, you will be doing a lot of repeated memory re-allocation.
ah, okay!

Iniciar sesión para comentar.

Categorías

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

Etiquetas

Preguntada:

NG
el 12 de Ag. de 2014

Comentada:

el 10 de Oct. de 2015

Community Treasure Hunt

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

Start Hunting!

Translated by