在MATLAB中是字符串矩阵单元格的成员

时间:2011-05-19 19:10:25

标签: matlab

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] 

1 个答案:

答案 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]