2017-08-30 87 views

回答

2

您可以用cellfunisequal做到這一點:

myData(cellfun(@(c) isequal(c, 'NF'), myData)) = {0}; 

或者你可以使用strcmpJon suggests

myData(strcmp(myData, 'NF')) = {0}; 

然而,應該指出的是,這兩種解決方案都沒有恰好爲等同於每種情況。來自the documentation for strcmp

strcmp函數用於比較文本。如果用於不支持的數據類型,則strcmp始終返回0

因此,如果任一輸入參數是比其他數據類型的字符向量/陣列,字符向量,或串陣列的單元陣列,strcmp將返回false。相反,isequal在確定它們是否相等時會忽略輸入參數的數據類型。例如,數字矢量[78 70]是對應的ASCII碼字符矢量'NF'的,所以你從strcmpisequal結果如下:

>> strcmp([78 70], 'NF') 

ans = 
    logical 

    0  % No match 

>> isequal([78 70], 'NF') 

ans = 
    logical 

    1  % Match 

換句話說,strcmp比較不同數據的平等時要嚴格得多,類型,而isequal則更爲寬鬆,允許不同數據類型的輸入在其基礎數據實際上相同時被認爲是相等的。在選擇解決方案之前,您應該考慮需要哪種行爲。

+0

天哪簡單的解決方案非常感謝你。這是一個這樣簡單的解決方案! – Snek22

0

for循環雙可以解決這個問題:

for j=1:size(myData,1) 
    for k=1:size(myData,2) 
     if strcmp(myData{j,k},'NF') 
      myData{j,k}=0; 
     end 
    end 
end 

其中size(myData,1)發現的行數和size(myData,2)找到你的混合單元陣列的列的數目。

3

使用strcmp

myData(strcmp(myData,'NF'))={0} 
相關問題