我一直试图自己解决这个问题并在此搜索过。事实上,我不太确定问题是什么并没有帮助解决这个问题。我之前在其他人的答案中找到了很好的帮助,所以我希望你能帮助我。
我有一个由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的阈值(即我的目的太短,我想忽略它。)