Append element to a cell

조회 수: 9 (최근 30일)
Afaf Arfaoui
Afaf Arfaoui 2018년 7월 9일
편집: Afaf Arfaoui 2018년 7월 9일
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:

답변 (2개)

Guillaume
Guillaume 2018년 7월 9일
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
Afaf Arfaoui
Afaf Arfaoui 2018년 7월 9일
I edited my question. Actually the indexing of my cell array is not the only one

댓글을 달려면 로그인하십시오.


Jan
Jan 2018년 7월 9일
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
Jan
Jan 2018년 7월 9일
편집: Jan 2018년 7월 9일
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 2018년 7월 9일
편집: Afaf Arfaoui 2018년 7월 9일
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:

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Creating, Deleting, and Querying Graphics Objects에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by