ismember检查单元格数组或矩阵元素。我们如何一起检查字符串数字元素?请参阅以下内容:
cell1 = {'netincome' [1] ; 'equity' [2] } ;
cell2 = { 'cogs' [2222] [1] ; 'equity' [3501] [2] ;
'equity' [3333] [1] ; 'netincome' [1751] [1] } ;
这失败了 - > ismember(cell1(:,[1 2]),cell2(:,[1 3])%我知道它失败的原因。
有没有办法匹配2个单元格中的字符串元素和数字元素?我尝试独立使用ismember(使用了cell2mat func),但仍然无法找到正确的答案。想要的答案是:
[1751 ; 3501] ; OR 'netincome' [1751] [1] ; 'equity' [3501] [2]
答案 0 :(得分:1)
我认为这种情况没有任何好的内置解决方案。我能想到的最好的一个是创建两个嵌套循环来比较每个单元格数组的所有行,使用函数ISEQUAL进行比较:
index = zeros(size(cell1,1),1);
for row1 = 1:size(cell1,1)
for row2 = 1:size(cell2,1)
if isequal(cell1(row1,:),cell2(row2,[1 3]))
index(row1) = row2;
break
end
end
end
结果将是N-by-1向量index
中的一组匹配索引,其中N是cell1
中的行数。如果一行cell1
无法与cell2
任意一行中的数据匹配,则index
的相应条目将为0. index
中的匹配指数将保留cell1
中数据的原始顺序。此外,此代码忽略cell2
中的多个匹配,仅返回找到的第一个匹配的索引并打破内部循环(这可能会减少所需的迭代次数)。
现在您可以索引cell2
以获取与cell1
中的内容相对应的数据:
>> cell2(index,:)
ans =
'netincome' [1751] [1]
'equity' [3501] [2]