2017-09-18 21 views
2

我想創建一個函數,它接收一個數組並返回零之前的數組部分。例如,[12, -4, 5, 32, 0, 4, 1, -8]將返回[12, -4, 5, 32],如果數組不包含零,則返回整個數組。MATLAB函數返回一個零之前的數組的一部分

這是我到目前爲止有:

function V = Notzero(V) 
    V(V==0)=[]; 
end 

我一個非常新MATLAB。我相信我寫的數組返回的數組沒有零,但我不知道如何繼續。

回答

5

這裏有一個選項,它只是清除一切從第一個零到矢量的末尾:

function V = Notzero(V) 
    V(find(V == 0, 1):end) = []; 
end 

欲瞭解更多信息,我建議你讀了上matrix indexing,特別是colon operator,在end關鍵字和find功能。

0

試試這個:

V = [12, -4, 5, 32, 0, 4, 1, -8]; 
idx = find(V==0); 
V = V(1:idx-1); 
+1

這不符合要求_如果數組不包含0,則返回整個數組._ –

2

這裏是一個辦法(但我喜歡@gnovice's answer越好):

result = V(cumprod(V~=0)~=0); 

例子:

>> V = [12, -4, 5, 32, 0, 4, 1, -8]; 
>> result = V(cumprod(V~=0)~=0) 
result = 
    12 -4  5 32 

>> V = [20 40 30 10]; 
>> result = V(cumprod(V~=0)~=0) 
result = 
    20 40 30 10 
+0

好,好的訣竅:) – Adiel

相關問題