2014-03-29 16 views
0

任何人都可以告訴我如何比較這個for循環數組值pp1與pp的單值如果pp值存在於pp1中,則它必須顯示1或者必須顯示0.我只得到1的最後一個值。代碼是:如何在matlab中比較具有單個值的數組的值

[pp,pf1]=pitchauto(x,fs); 

for ix=1:2 
    V='.wav'; 
    ie=num2str(ix); 
    Stc=strcat(ie,V); 
    [x1,fs1]=wavread(Stc); 
    figure,plot(x1); 
    title('Test Audio'); 
    [pp1,pf1]=pitchauto(x1,fs1); 
end 

if (pp==pp1) 
    msgbox('Matching'); 
else 
    msgbox('Not Matching'); 
end 

請回答正確的答案。

+0

測試是在循環之後進行的,所以當然你只能得到最後一個項目。如果您想依次測試每個項目,請將測試放入循環中。 – Notlikethat

+0

我應該把這個pp值放在循環中嗎? –

+0

使用'ismember'。 –

回答

0

您每次計算一個值爲pp1,不做任何事情,然後讓下一個循環迭代覆蓋它。要利用它,要麼把測試循環中:

for ix=1:2 
    V='.wav'; 
    ie=num2str(ix); 
    Stc=strcat(ie,V); 
    [x1,fs1]=wavread(Stc); 
    figure,plot(x1); 
    title('Test Audio'); 
    [pp1,pf1]=pitchauto(x1,fs1); 

    if (pp==pp1) 
     msgbox('Matching', num2str(ix)); % show the index number as msgbox title 
    else 
     msgbox('Not Matching', num2str(ix)); 
    end 
end 

或收集在一個陣列的pp1值事後測試:

for ix=1:2 
    V='.wav'; 
    ie=num2str(ix); 
    Stc=strcat(ie,V); 
    [x1,fs1]=wavread(Stc); 
    figure,plot(x1); 
    title('Test Audio'); 
    [pp1(ix),pf1]=pitchauto(x1,fs1); % assuming pitchauto returns a scalar 
end 

matchidx = (pp == pp1); 
if any(matchidx) 
    msgbox(strcat('Matching indices: ', num2str(find(matchidx)))); 
else 
    msgbox('Not Matching'); 
end 

如果值標,那麼這種方法會更困難 - 您仍然可以使用矩陣來收集等大小的向量,或者使用單元陣列來收集任何東西 - 但在這種情況下,使用第一種方法可能會更容易。

+0

謝謝你的傢伙。 –

+0

您每次循環運行時分類的第一個代碼。第二代碼完美。再次感謝 –