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 commentaires

Can you explain with an example?
NG
NG le 12 Août 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

Connectez-vous pour commenter.

 Réponse acceptée

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 commentaires

NG
NG le 12 Août 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 le 12 Août 2014
Modifié(e) : Matt J le 12 Août 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 le 12 Août 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 le 12 Août 2014
Modifié(e) : Matt J le 12 Août 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 le 12 Août 2014
Ok! Thanks !
The first step to fix it is to show the code which is throwing this error ;-)

Connectez-vous pour commenter.

Plus de réponses (3)

Joakim Magnusson
Joakim Magnusson le 12 Août 2014
Modifié(e) : Joakim Magnusson le 12 Août 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 commentaires

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 le 12 Août 2014
Modifié(e) : Matt J le 12 Août 2014
cell2mat.m does use a loop. You could use vertcat, which is a builtin optimized function,
C=vertcat(matrices{:});
NG
NG le 12 Août 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.

Connectez-vous pour commenter.

Joakim Magnusson
Joakim Magnusson le 12 Août 2014
Modifié(e) : Joakim Magnusson le 12 Août 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 commentaires

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

Connectez-vous pour commenter.

Catégories

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by