MATLAB Answers

index exceeding array bounds

조회 수: 1(최근 30일)
Tim Johansson
Tim Johansson 2020년 10월 28일
답변: Star Strider 2020년 10월 28일
For some reason i exceed array bounds but i cant seem to figure out why.
The code looks like this:
1 for i = 1:length(
2 for j = 1:length({i}.movement)
3 k=ceil(j/4)
4 if rawData.sub3.label{i}.data(j,3) == 0
5 classData.sub3.movement.right{i,k}{i}.movement{j}
6 elseif rawData.sub3.label{i}.data(j,3) == 1
7 classData.sub3.movement.up{i,k}{i}.movement{j}
8 elseif rawData.sub3.label{i}.data(j,3) == 2
9 classData.sub3.movement.left{i,k}{i}.movement{j}
10 elseif rawData.sub3.label{i}.data(j,3) == 3
11 classData.sub3.movement.down{i,k}{i}.movement{j}
12 end
13 end
14 end
Where rawData is a struct that contains run(a 1x20 cell array) which each contain a 1x20 cell array (but in one case a 1x10).
The error i get is
"Error in code (line 4), if rawData.sub3.label{i}.data(j,3) == 0"
"Index in position 1 exceeds array bounds (must not exceed 10)."
but the code should in my eyes be able to handle the change in array size.
Furthermore the error seems to happen before it hits run{11} which is the 1x10 cell array.
any help would be appriciated.


Star Strider
Star Strider 2020년 10월 28일
One option would be to test ‘j’ against the number of rows in the matrix-of-interest, something like this:
for j = 1:length({i}.movement)
m = min(j,size(rawData.sub3.label{i}.data(:,3),1));
if rawData.sub3.label{i}.data(m,3) == 0
and so for the rest of the references to it. That should keep the index from referencing the array elements that do not exist. Other changes to the code as well may be necessary. It might also be worthwhile to consider using break to exit the ‘j’ loop if j>m.
I cannot test this with your data, so I am posting it as UNTESTED CODE.


Community Treasure Hunt

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

Start Hunting!

Translated by