Append element to a cell

8 visualizaciones (últimos 30 días)
Afaf Arfaoui
Afaf Arfaoui el 9 de Jul. de 2018
Editada: Afaf Arfaoui el 9 de Jul. de 2018
I am trying to loop over a cell array S and see if S{i,3} is equal to a j than add the elements of S{i,2} to X{j,1}
j = 1;
X = {};
while j < 29
X{j,1} = j;
for i = 1:length(S)
if S{i,3} == j
for k = 1:length(S{i,2})
X{j,2} =[X{j,2}, S{i,2}(k,1)];
end
end
end
j = j+1;
end
I get Index exceeds matrix dimensions for line 13.
Here is the cell array S:
And S{i,2} looks like this:

Respuestas (2)

Guillaume
Guillaume el 9 de Jul. de 2018
Index exceeds matrix dimensions
Well, then considering that the only indexing is of your cell array, either it doesn't have two columns or it doesn't have i rows. In any case, X{i, 2} is not valid. If X{i, 2} were valid your syntax is indeed correct.
  1 comentario
Afaf Arfaoui
Afaf Arfaoui el 9 de Jul. de 2018
I edited my question. Actually the indexing of my cell array is not the only one

Iniciar sesión para comentar.


Jan
Jan el 9 de Jul. de 2018
The message means, that X does not have either i rows or not 2 columns. You can check this easily using the debugger. Type this in the command window:
dbstop if error
Run the code again until stops at the error. Then check:
size(X)
  4 comentarios
Jan
Jan el 9 de Jul. de 2018
Editada: Jan el 9 de Jul. de 2018
This is not useful:
for k = 1:length(S{i,2})
X{j,2} = S{i,2}(k,1);
end
It overwrite X{j,2} in each iteration. Maybe you want:
x{j,2} = S{i,2}
or
x{j,2} = S{i,2}(:, 1)
without a loop.
NOTE: Using length is prone to bugs, because it replies the longest dimension. If you want to get the length of the first dimension, use:
size(S, 1)
A cleaned version of your code:
X = cell(29, 2); % Pre-allocate
For j = 1:29
X{j,1} = j;
for i = 1:size(S, 1)
if S{i,3} == j
X{j,2} = [X{i,2}, S{i,2}(:,1)];
end
end
end
The pre-allocation creates X{i, 2} implicitly as [].
Are you sure that [X{ i ,2}, S{i,2}(:,1)] is wanted, not j ?
Afaf Arfaoui
Afaf Arfaoui el 9 de Jul. de 2018
Editada: Afaf Arfaoui el 9 de Jul. de 2018
Thank you. You're right it's X{j,2}. But I want to append elementS in the same row in each iteration of j and not in different columns:

Iniciar sesión para comentar.

Categorías

Más información sobre Creating, Deleting, and Querying Graphics Objects en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by