Matlab 查找第一个索引,使所有连续元素都为零

Matlab 查找第一个索引,使所有连续元素都为零,matlab,Matlab,我在matlab中有一个向量 a = [1 8 0 7 0 5 9 0 0 0 0 0 0 0 0] 在这里,我感兴趣的是找到第一个索引(超过该索引,值完全为零),其中零连续出现。在这个例子中,我希望答案是8 last_idx = max(find(a~=0)) + 1 但是,如果您的最后一个条目不是零,您必须小心…即使您的最后一个条目不是零,或者您的第一个条目是零,或者您的所有条目都是零,一种有效的方法几乎涵盖了所有内容 find(diff([1 a]==0)==1,1,'last')

我在matlab中有一个向量

a = [1 8 0 7 0 5 9 0 0 0 0 0 0 0 0]
在这里,我感兴趣的是找到第一个索引(超过该索引,值完全为零),其中零连续出现。在这个例子中,我希望答案是
8

last_idx = max(find(a~=0)) + 1

但是,如果您的最后一个条目不是零,您必须小心…

即使您的最后一个条目不是零,或者您的第一个条目是零,或者您的所有条目都是零,一种有效的方法几乎涵盖了所有内容

find(diff([1 a]==0)==1,1,'last')

请注意,这将查找最后一组零的位置。

find
基本上为您提供了以下功能:

find(a, 1, 'last') + 1

由于
find
只返回非零字符的位置列表,所以您所要做的就是要求
find
只给出最后一个这样的元素,然后是下一个元素(因此
+1

这比简单的@Dan答案有什么优势吗?(稍后发布)@DennisJaheruddin是的,这个答案返回零之前的最后一个非零数字。我的答案只返回最后一个非零number@DennisJaheruddin-我同意丹的看法。OP对问题的边缘案例不是很清楚。常见问题解答中对否决票的定义是:“每当你遇到一篇极其草率、不费力气的帖子,或者一个明显而且可能危险地不正确的答案时,使用你的否决票。”。这并不是危险的错误,当然是努力而不是草率的表现。这只是对这个问题的另一种解释,我们必须填补一些空白。我还建议你改变你的投票,因为这可以用多种方式来解释。顺便说一句,Divakar我感谢你们。@rayryeng感谢你们的支持!:)我想如果丹尼斯通读了这里的问题和评论,对他来说可能更有意义!这是一件让我感到困扰的事情,这里张贴的问题的质量。我投了反对票,因为我看不出这是提问者需要的。(不是因为我看得出他可能想要别的东西)。我仍然看不到,但和其他人一样,我想没有必要投反对票。我认为OP是在寻找“最后”一组零的第一个索引。如果最后一个元素不是零,那么这段代码对它有效吗?仍然是一个聪明的解决方案!也许OP一开始并没有考虑这种情况+1如果向量的最后一个元素为非零怎么办?如果
a=[2 0 4 0 0 5]
,结果会是什么?@Dan-我会将其解释为返回空/空,因为没有连续的元素为0。我认为OP需要调整问题的措辞,以说明他们是否希望找到连续的零流(即一直到数组末尾)或找到最长的零流。@Dan我认为对于
[2 0 4 0 0 5]
,它有两组连续的零,一个从
2
开始,另一个从
4
开始。所以它必须是
4
。我会让OP确认的。@rayryeng…或最后一组零。这正是我要求OP澄清的原因。你好,asker!当最后一个元素为非零时,您能否澄清关于该情况的混淆?令人困惑的问题不会给Stackoverflow增加太多的价值。虽然
find(a~=0)
可能更容易阅读,但只要
find(a)
就可以得到相同的结果。