2017-08-30 50 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} 
相关问题