2014-02-11 73 views
-3

我有一個變量數組一樣SSVV,等等。我只希望創建與V變量的新數組,因此,例如:創建從另一個數組,並找到索引Matlab的

V 

SV 

S 

V 

成爲

V 

V 

在此之後,我需要知道在哪裏V變量中的每一個被發現的索引,在這種情況下,指數1和4

P.S我已經在for循環像這樣使用if嘗試:

for i=1:744; 
    if most_common_string{i} == 'V' 
     periodo=most_common_string{i}; 
    end 
end 

,但我沒有得到所有的V的數組。事實上,我只得到一個單元格。

我也嘗試過find函數來獲取索引,但它不起作用。

+0

定義「它不工作」 – scenia

回答

1

你不需要第二個數組;你可以使用cellfun。此外,比較字符串使用strcmp,不==(這可能就是你的代碼是不工作):

>> array = {'V';'SV';'S';'V'}; 
>> ind = cellfun(@(s) strcmp(s,'V'), array) 

ind = 

    1 
    0 
    0 
    1 

>> find(ind) 

ans = 

    1 
    4 
+0

當然,匿名函數。這就是爲什麼我沒有使用'cellfun'工作,我忘了使用匿名函數。 – scenia

+0

感謝您的幫助! – user3103689

1

這樣做的一種方法是修復您的for循環。問題是,你總是把值賦給同一個變量。沒有太多的收穫。您需要添加到數組中:

result = {}; 
indices = []; 
for i=1:numel(most_common_string) 
    if most_common_string{i} == 'V' 
     indices = [indices;i]; 
     result = [result;most_common_string(i)]; 
    end 
end 

請注意Code Analyzer可能會在循環迭代期間抱怨您的數組更改大小。你不能真正避免這種情況,因爲你不知道數組的大小。

find可能無法正常工作,因爲它不適合用於單元陣列。

相關問題