How can I increase the size of matrices in cell arrays with each iteration of a loop?
8 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Jacob Martire
el 7 de Feb. de 2023
Comentada: Voss
el 7 de Feb. de 2023
I have a cell array that is 10x10 with each cell containing a 1x3 matrix of numerical values. This cell array is generated inside a loop that has 10 iterations, thus there are 10 versions of this cell array, each with different values.
I would like to know how to store each iteration of this cell array in a single cell array which is still 10x10, however with each cell containing a 10x3 matrix. Basically, I want each iteration of the loop to add a row to the matrix in each cell and populate those rows with the corresponding cells of the new cell array generated during that iteration.
0 comentarios
Respuesta aceptada
Voss
el 7 de Feb. de 2023
A 10x10 cell array where each cell contains a 1x3 vector:
C = repmat({[0 0 0]},10,10);
Another 10x10 cell array where each cell contains a 1x3 vector:
C_new = repmat({[1 1 1]},10,10);
Append the contents of each cell of C_new as a new row on the contents of the corresponding cell of C:
C = cellfun(@vertcat,C,C_new,'UniformOutput',false)
So that last line is what you would do on each iteration, where C_new is the new version each time.
% Initialize C
C = cell(10,10);
% run 10 iterations
for ii = 1:10
% ...
% here you would calculate C_new, which is the new version for this iteration.
% ...
C = cellfun(@vertcat,C,C_new,'UniformOutput',false);
end
disp(C)
2 comentarios
Más respuestas (2)
Sulaymon Eshkabilov
el 7 de Feb. de 2023
There are a few different ways to create such as cell array. If to get it done in a loop:
rng(1) % To replicate at any time and obtain the same results of random numbers
for ii = 1:10
for k=1:10
H{ii,k} = randi([-5,5],1, 3);
end
end
H{1,1}
H{1,2}
H{3,1}
% etc
0 comentarios
Fifteen12
el 7 de Feb. de 2023
This code gives two solutions, one that can be implemented after your original iteration (it just harvests the values and puts them into a new matrix), and one that can be implemented during your original iteration (which you'll have to splice into your own code).
% Generate original cell arrays
n = 10;
for k = 1:n
for i = 1:n
for j = 1:n
foo{i, j} = [i, j, k]; %Random values
end
end
original{k} = foo;
end
% Post adaptation from original iteration
for i = 1:n
for j = 1:n
temp = zeros(n, 3);
for k = 1:length(original)
temp(k, :) = original{k}{i, j};
end
out1{i, j} = temp;
end
end
% Adaption during original iteration
out2 = cell(n, n);
for k = 1:n
for i = 1:n
for j = 1:n
out2{i, j}(k, :) = [i, j, k]; %Random values
end
end
end
Ver también
Categorías
Más información sobre Loops and Conditional Statements en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!