Error in loop: Attempted to access X(5); index out of bounds because numel(X)=4
1 次查看(过去 30 天)
显示 更早的评论
I tried searching, but don't seem to see any solutions for my problem. I have the entire code attached in a file, along with a valid data example.
In the following
for l = 1 : length(X) % uses the letter L
if X(l) < 20 || X(l) > 200 || Y(l) < 50 || Y(l) > 500 ...
|| any(a{l} < 0) || any(a{l} > 360) ...
|| any(N{l} < 0) || any(N{l} > 50)
X(l) = [];
Y(l) = [];
a{l} = [];
N{l} = [];
fprintf('Error in test subject %d, discarding dataline.\n',l)
end
end
I get an error
Error in test subject 3, discarding dataline.
Attempted to access X(5); index out of bounds because numel(X)=4.
In this example there are datalines to go through. It 'deletes' each not-valid dataline, but unless it is the last dataline only that is discarded, this error will appear. Any way to solve this? The attached .m shows how i made the function (do tell if you want me to just c/p it here instead!).
0 个评论
采纳的回答
dpb
2014-6-25
Yes, a very common error in coding logic everybody makes when starting out...when you process from the beginning and remove a row, then you've just shortened the size of the array. Couple of ways to go at it; the simplest is simply to begin at the end and work forward...
for i=length(x):-1:1
if condition, x(i)=[]; end
end
Another is to keep a list of the bad locations and wait until the end and do them all at once't...
ix=[];
for i=1:length(x)
if condition, ix=[ix;i]; end
end
x(ix)=[];
Or, same idea, vectorize the test and eliminate the loop...
ix=logicaltest(x); % return logical vector of lines to kill
x(ix)=[];
Or, of course, you can reverse the test logic and find those to keep instead.
2 个评论
dpb
2014-6-25
I'm unaware of a specific list, no, altho I'm sure there are many around. These things that seem so obvious once pointed out are simply part of learning; almost everybody will have done the same or something very similar at some time in their evolution. I think it's probably a case where most of them one has to discover on their own simply as reinforcing the learning process--one can be told all these things but until experience for oneself it doesn't make the same impression.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!