如何在向量中高效地找到一個0
,假設該向量中至少有一個零點?如何在向量中找到一個零元素
假設有一個向量v = [1; 0; 1; 3; 4; 0; 0]
。我知道find(v==0)
將返回v
的零元素的所有索引,但因爲我只想要這些零中的一個,所以哪一個都可以,這似乎不是很有效。有沒有更好的方法,還是應該使用while
循環的for
?
如何在向量中高效地找到一個0
,假設該向量中至少有一個零點?如何在向量中找到一個零元素
假設有一個向量v = [1; 0; 1; 3; 4; 0; 0]
。我知道find(v==0)
將返回v
的零元素的所有索引,但因爲我只想要這些零中的一個,所以哪一個都可以,這似乎不是很有效。有沒有更好的方法,還是應該使用while
循環的for
?
find(v==0,1,'first')
只會給你一個零實例,即第一個。 find(v==0,1,'last')
也是如此,它會給你最後一個。由於find
在第一次遇到零(從頂部或底部)後會終止,因此速度會更快。
你提到任何一個都行,這樣就行了。對於一個隨機0,它會更加涉及。
在正常情況下,我會考慮用最簡單的解決方案的最佳實踐,已在該意見中提到:
find(~v,1)
請注意,它對完整向量執行操作,因爲它首先完全評估它是否爲非零值。
如果你有一個非常長的向量,並期望找到一個非常快的零(例如在第一個log(n)條目中),它會給你一個更好的複雜性來使用while循環,在找到零時停止。
這就是說,矢量操作非常高效,循環有一些開銷。因此,如果一個循環比找到更快,我會感到驚訝。
當然這一切是如何工作的,如果你真的想獲得最佳的性能,這一切都降低了尋找的基本規則是什麼在起作用最快:
嘗試所有可能的選擇,看看有什麼實際工作速度最快的爲您解決
嘗試使用find(〜Ⅴ類,1) – JLev