Matlab:循环中的变量索引大小

时间:2015-06-20 19:01:46

标签: matlab indexoutofboundsexception

我一直试图自己解决这个问题并在此搜索过。事实上,我不太确定问题是什么并没有帮助解决这个问题。我之前在其他人的答案中找到了很好的帮助,所以我希望你能帮助我。

我有一个由1和0组成的数据集(2000x1100),其中每行代表一个数据点随着时间的推移(列)。 我试图找到每行0的序列,并排除那些低于特定长度的序列。我已经在这里找到了有用的答案,允许我这样做(谢谢!)。

'test'是我用来测试代码的简化测试数据集。

for j = 1:size(test,1)

testThresh(j,:) = diff([1 test(j,:)]);
startIndex = find(testThresh(j,:) < 0);
if isempty(startIndex)
   continue
   j = j+1;
end
endIndex = find(testThresh(j,:) > 0)-1; 

if numel(endIndex) == 1

    for m = 1:size(startIndex,2)

        duration = (endIndex(m)-startIndex(m))+1;  
        threshold = (duration < 10);
        startIndexC = startIndex(threshold);
        endIndexC = endIndex(threshold);
    end
else    
    duration = (endIndex(j,:)-startIndex(j,:))+1;  
    threshold = (duration < 10);
    startIndexC = startIndex(threshold);
    endIndexC = endIndex(threshold);
end

...

我稍后会将低于阈值的0序列替换为1。

代码工作正常,直到我碰巧有一行不包含任何0。它会跳到下一行,但它会导致错误:

 Attempted to access endIndex(2,:); index out of bounds because size(endIndex)=[1,4].

我真的不明白为什么会导致错误。如果此特定行前面没有包含no-zero的行,则没有任何问题。 我假设遇到没有0的行会对数组的允许大小产生影响。我真的不知道如何绕过它。我无法预先分配,因为我不知道变量在每次迭代中将达到的大小(无论如何我都尝试了它并没有帮助)。 我还试图说,numel(endIndex)&gt; = 1否则跳到下一步。这也行不通。我可能犯了一个非常愚蠢的错误,但我仍然是Matlab的新手并且无法理解它。

我希望有人可以帮忙解决这个问题!

非常感谢任何帮助!

编辑:

 duration = (endIndex(1,:)-startIndex(1,:))+1;

这非常愚蠢。我很惭愧。感谢您指出了这一点。

只是出于完成的原因,因为我对我想要完成的事情不够具体(抱歉):我想确定很多1的0的延伸的开始,结束和长度。如果这些延伸的长度低于10的阈值(即我的目的太短,我想忽略它。)

0 个答案:

没有答案