是否有更好的方法从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
。这相当于在indices
:lookup_idx = [1,1]
中搜索banana
&&
yellow
的位置。
不幸的是,尝试使用fruittbl
是不正确的。
预先感谢
最好
答案 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)
您可以使用ismember
和categorical
...
idx = ismember( categorical( fruittbl ), {'banana','yellow'}, 'rows' )
输出:
>> idx
0
0
1
0
0
因此第3行(find(idx)
)是fruittbl
中等于{'banana','yellow'}
的行。您必须使用categorical
,因为未为单元格数组和ismember
属性定义rows
。