使用逻辑数组从matlab中的单元格数组获取字符串组合位置

时间:2019-02-06 23:23:35

标签: arrays string matlab indexing

是否有更好的方法从position获取two strings的{​​{1}}?为了说明我的观点,请在下面的示例中找到

cell array

在这里,我有兴趣获得fruittbl{1,1} = 'banana' fruittbl{2,1} = 'mango' fruittbl{3,1} = 'banana' fruittbl{4,1} = 'peach' fruittbl{5,1} = 'banana' fruittbl{1,2} = 'green' fruittbl{2,2} = 'red' fruittbl{3,2} = 'yellow' fruittbl{4,2} = 'green' fruittbl{5,2} = 'red' f= 'banana'; c = 'yellow' idx_f = cellfun(@(x) isequal(x, f),fruittbl(:,1)) idx_c = cellfun(@(x) isequal(x, c),fruittbl(:,2)) lookup_idx = [idx_f idx_c] % logical array lookup_idx = 1 0 0 0 1 1 0 0 1 0 的{​​{1}},其中values。这相当于在indiceslookup_idx = [1,1]中搜索banana && yellow的位置。

不幸的是,尝试使用fruittbl是不正确的。

预先感谢

最好

2 个答案:

答案 0 :(得分:1)

我认为这可能是您想要的:

>> result = ismember(fruittbl(:,1),'banana') & ismember(fruittbl(:,2),'yellow')

result =

  5×1 logical array

   0
   0
   1
   0
   0

>> fruittbl(result,1)

ans =

  1×1 cell array

    {'banana'}

>> fruittbl(result,2)

ans =

  1×1 cell array

    {'yellow'}

答案 1 :(得分:1)

您可以使用ismembercategorical ...

idx = ismember( categorical( fruittbl ), {'banana','yellow'}, 'rows' )

输出:

>> idx
  0
  0
  1
  0
  0

因此第3行(find(idx))是fruittbl中等于{'banana','yellow'}的行。您必须使用categorical,因为未为单元格数组和ismember属性定义rows