Is there a way to combine number of matrices into one?

9 visualizaciones (últimos 30 días)
Moses Tang
Moses Tang el 4 de Abr. de 2019
Comentada: Moses Tang el 4 de Abr. de 2019
Hi there, I would like to ask is there a way to join multiple matrices into a single one in a better way?
I was thinking maybe a for loop could do the job, but I don't know where to start as each data contains a different name.
For Example: Suppose I have 10 matrices, it is in the workspace as various name but equal sizes.
e.g) for all matrices in 10x10 size
matrix1_10
matrix11_20
matrix21_30.....
matrix91_100
I would like to join them into a column, so like 100x10 size matrix
I do know there is a way to do this.
If I would like to join each other vertically, well I could do [matrix1_10; matrix11_20 ; matrix21_30 ; ...... ; matrix91_100], it will do just fine.
However if the number of data was not 10 matrices, could be 1000, 10000 or more, what should I do in order to get the job done?
Like I said, probably a for loop may help me on this case. But I don't know what to begin with? Or is there a better solution to this?
Thank you.

Respuesta aceptada

Jan
Jan el 4 de Abr. de 2019
Editada: Jan el 4 de Abr. de 2019
If you have 1000 arrays, it would be a really bad idea to store them in different variables, e.g. by hinding an index in the name of the variable. See TUTORIAL: Why and how to avoid Eval
If you use a cell array instead, the solution is trivial:
matrix = cell(1, 10);
for k = 1:10
matrix = cell(10, 10);
end
% Join the matrices vertically:
result = cat(1, matrix{:})
  1 comentario
Moses Tang
Moses Tang el 4 de Abr. de 2019
Thank you very much! I will consider this method and give it a try.

Iniciar sesión para comentar.

Más respuestas (1)

Stephan
Stephan el 4 de Abr. de 2019
Editada: Stephan el 4 de Abr. de 2019
Hi,
this solution is evil - since it uses eval:
A = whos;
A = {A.name};
B = string(ones(1,2*numel(A)-1));
B(2:2:end) = ",";
for k = 1:numel(A)
B(2*k-1) = A{k};
end
M = eval(join(['vertcat(',B,')']));
To use it make sure that only your variables are in workspace you want to join!
Example:
clear
M1 = zeros(3)
M2 = ones(3)
M3 = M1
M4 = randi(10,3)
results in
M1 =
0 0 0
0 0 0
0 0 0
M2 =
1 1 1
1 1 1
1 1 1
M3 =
0 0 0
0 0 0
0 0 0
M4 =
10 4 5
2 1 10
3 7 5
After running the script:
>> M
M =
0 0 0
0 0 0
0 0 0
1 1 1
1 1 1
1 1 1
0 0 0
0 0 0
0 0 0
10 4 5
2 1 10
3 7 5
But note that this is bad style - read here:
Best regards
Stephan
  1 comentario
Moses Tang
Moses Tang el 4 de Abr. de 2019
Although it's not the prefered method in joining the matrices, but thank you very much for your hardwork.
Thank you!

Iniciar sesión para comentar.

Categorías

Más información sobre Logical en Help Center y File Exchange.

Etiquetas

Productos


Versión

R2018b

Community Treasure Hunt

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

Start Hunting!

Translated by