我有一个带字符串和整数的混合单元格数组。例如:
myData = {'blank' 'a' 'b' 'c'; ...
'sample1' 5 6 'NF'; ...
'sample2' 'NF' 54 'NF'};
我想进入此单元格数组,查找'NF'
的所有实例并将其转换为0
。
答案 0 :(得分:3)
使用strcmp
myData(strcmp(myData,'NF'))={0}
答案 1 :(得分:2)
myData(cellfun(@(c) isequal(c, 'NF'), myData)) = {0};
或者您可以将strcmp
用作Jon suggests:
myData(strcmp(myData, 'NF')) = {0};
然而,应该注意的是,这两种解决方案在每种情况下都不是完全等效。来自the documentation for strcmp
:
strcmp
函数用于比较文本。如果在不受支持的数据类型上使用,strcmp
始终会返回0
。
因此,如果任一输入参数是字符向量/数组以外的数据类型,字符向量的单元格数组或字符串数组,strcmp
将返回false
。相反,isequal
在确定它们是否相等时忽略输入参数的数据类型。例如,数字向量[78 70]
是字符向量'NF'
的ASCII等价物,因此您可以从strcmp
和isequal
获得以下结果:
>> strcmp([78 70], 'NF')
ans =
logical
0 % No match
>> isequal([78 70], 'NF')
ans =
logical
1 % Match
换句话说,strcmp
在比较不同数据类型的相等性时要严格得多,而isequal
则更宽松,允许不同数据类型的输入在其基础数据为实际上是一样的。在选择解决方案之前,您应该考虑需要哪种行为。
答案 2 :(得分:0)
双循环可以解决这个问题:
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)
找到混合单元格数组的列数。