2016-03-17 59 views
0

嗨,我是MATLAB新手,我想知道這個函數實際上做了什麼。該功能是從以前的問題中複製出來的,這個問題幫助我解決了一個問題,從而找到了連續數字的頻率。有人能告訴我這個函數實際上做了什麼嗎?

鏈接: Series of consecutive numbers (different lengths)

d=[3 2 4 2 2 2 3 5 1 1 2 1 2 2 2 2 2 9 2] 
q = diff([0 d 0] == 2); 
v = find(q == -1) - find(q == 1); 
+0

給出向量中連續的'2'''的數量,'v = 1 3 1 5 1' – Adiel

回答

4

讓得到它一步一步來。

您有一個數組d

d=[3 2 4 2 2 2 3 5 1 1 2 1 2 2 2 2 2 9 2] 

,並應用到它

q = diff([0 d 0] == 2); 

這需要的[0 d 0] == 2的衍生物。基本上它需要所有可在數字的衍生物2的[0 d 0] == 2的結果是:

0 0 1 0 1 1 1 0 0 0 0 1 0 1 1 1 1 1 0 1 0 

可以看到,有1每當有在原來的矢量是2,並且它具有在0最後乞討和0。如果我們把這個衍生的q = diff([0 d 0] == 2)

q = 

    0 1 -1 1 0 0 -1 0 0 0 1 -1 1 0 0 0 0 -1 1 -1 

你得到1,只要在原來的矢量2出現和-1消失時。最後一行分別找到1和-1,然後減去它們出現的索引,這樣你現在可以在它們之間有多少個數字。因爲1代表「數字2開始」,-1代表「連續數不超過2」,這會給你連續2個連續數的長度。

v = find(q == -1) - find(q == 1); 

v= 
    1  3  1  5  1 

有一個在開始時的單個2,則有一系列的第3個2S,然後另一單一個,那麼5來通過9分離,最後一個來。

+1

你有很多的耐心......對你有好處:) – Adiel

+0

find函數完成什麼?如果我將2個查找函數分開:我使用 v = find(q == -1) x = find(q == 1) 其中 v = 3 7 12 18 20 和 x = 2 4 11 13 19 這些值來自哪裏? – bryevo

+0

查找非零項目的索引。你可以谷歌thath;) –

相關問題