我怎样才能有效地在向量中找到一个0
,假设该向量中至少有一个零?
假设有一个向量v = [1; 0; 1; 3; 4; 0; 0]
。我知道find(v==0)
将返回v
的零元素的所有索引,但由于我只想要其中一个零,任何一个都可以,这似乎不是很有效。有没有更好的方法,或者我应该使用for
while
个循环?
答案 0 :(得分:3)
find(v==0,1,'first')
只会给你一个零实例,即第一个。同样适用于find(v==0,1,'last')
,它将为您提供最后一个。因为find
然后在第一次遇到零之后终止(从顶部或底部),它会更快。
你提到任何一个都没关系,这样就行了。对于随机0,它会更复杂。
答案 1 :(得分:1)
在正常情况下,我认为最佳做法是使用最简单的解决方案,这已在评论中提及:
find(~v,1)
请注意,它确实对整个向量执行操作,因为它首先完全评估它以确定它是否为非零。
如果你有一个很长的向量,并且期望找到一个非常快的零(例如在第一个log(n)条目中),那么它将为你提供一个更好的复杂性来使用while循环,找到零。
话虽如此,向量操作非常有效,并且循环有一些开销。因此,如果循环结果比查找更快,我会感到惊讶。
当然所有这一切都应该如何运作,如果你真的想要获得最佳性能,那么这一切都会降低到找到最快效果的基本规则:
尝试所有替代方案,看看哪种方法最适合您的解决方案