Smart for loop for summing cell array matrices
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
federico nutarelli
el 7 de Jul. de 2021
Respondida: Steven Lord
el 7 de Jul. de 2021
Hi all,
I have an empty cell test_set_class and a cell matrix class_test made of 100x30 matrices (i.e. each element of classs_test is a 1229x119 matrix). What I would like to do is to perform the following
N_RIPETIZIONI=100;
for RIPETIZIONE = 1:N_RIPETIZIONI
test_set_class{RIPETIZIONE}=class_test{RIPETIZIONE,1}+class_test{RIPETIZIONE,2}+class_test{RIPETIZIONE,3}+class_test{RIPETIZIONE,4}+...
class_test{RIPETIZIONE,5}+class_test{RIPETIZIONE,6}+class_test{RIPETIZIONE,7}+class_test{RIPETIZIONE,8}+class_test{RIPETIZIONE,9}+class_test{RIPETIZIONE,10}+...
class_test{RIPETIZIONE,11}+class_test{RIPETIZIONE,12}+class_test{RIPETIZIONE,13}+class_test{RIPETIZIONE,14}+...
class_test{RIPETIZIONE,15}+class_test{RIPETIZIONE,16}+class_test{RIPETIZIONE,17}+class_test{RIPETIZIONE,18}+class_test{RIPETIZIONE,19}+class_test{RIPETIZIONE,20}+...
class_test{RIPETIZIONE,21}+class_test{RIPETIZIONE,22}+class_test{RIPETIZIONE,23}+class_test{RIPETIZIONE,24}+...
class_test{RIPETIZIONE,25}+class_test{RIPETIZIONE,26}+class_test{RIPETIZIONE,27}+class_test{RIPETIZIONE,28}+class_test{RIPETIZIONE,29}+class_test{RIPETIZIONE,30};
end
but looping also on the rows. I tried something like:
for RIPETIZIONE = 1:N_RIPETIZIONI
for cols =2:N_cols
test_set_class{RIPETIZIONE}=class_test{RIPETIZIONE,1}+class_test{RIPETIZIONE,cols};
end
end
but I am not sure that it does what I want.
Any help please?
0 comentarios
Respuesta aceptada
Steven Lord
el 7 de Jul. de 2021
a cell matrix class_test made of 100x30 matrices (i.e. each element of classs_test is a 1229x119 matrix)
In this case, where all the elements inside the cells of class_test are the same type and size, I would consider a different data structure.
c = cell(3, 4);
A = zeros(2, 5, 3, 4);
for row = 1:size(c, 1)
for col = 1:size(c, 2)
c{row, col} = rand(2, 5);
A(:, :, row, col) = c{row, col};
end
end
celldisp(c)
disp(A)
What does making a 4-dimensional array A get us? Compare how to sum up the matrices:
result1 = zeros(2, 5);
for k = 1:numel(c)
result1 = result1 + c{k};
end
result1
result2 = sum(A, [3 4]) % sum over dimensions 3 and 4
0 comentarios
Más respuestas (1)
Jan
el 7 de Jul. de 2021
Yes, this does, what you expect. Simply compare the results of both methods.
This is faster and looks cleaner:
for RIPETIZIONE = 1:N_RIPETIZIONI
S = 0;
for cols =2:N_cols
S = S + class_test{RIPETIZIONE, cols};
end
test_set_class{RIPETIZIONE} = S;
end
0 comentarios
Ver también
Categorías
Más información sobre Logical 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!