A = {'A'; 'E'; 'A'; 'F'};
B = {'A';'B';'C';'D';'E'; 'F'};
我正在尝试获取单元数组A
中的每个字符串,该字符串与单元数组B
中的字符串匹配。 A
会有重复的值,B
不会。
find(ismember(B, A) == 1)
输出
1
5
6
但我想得到
1
5
1
6
优选在一个衬里中。我不能使用strcmp而不是ismember,因为向量是不同的大小。
向量实际上包含日期字符串,我需要索引而不是逻辑索引矩阵,我对不使用它进行索引的数字感兴趣。
我该怎么做?
答案 0 :(得分:7)
您将参数翻转到ismember
,然后使用第二个输出参数:
[~,loc]=ismember(A,B)
loc =
1
5
1
6
第二个输出会告诉您A
中B
的元素在哪里。
如果您对代码中可以包含的行数进行非常严格的限制,并且无法解雇施加此类限制的管理员,则可能需要访问ismember
的第二个输出直。为此,您可以创建以下辅助函数,以允许直接访问函数的第i个输出
function out = accessIthOutput(fun,ii)
%ACCESSITHOUTPUT returns the i-th output variable of the function call fun
%
% define fun as anonymous function with no input, e.g.
% @()ismember(A,B)
% where A and B are defined in your workspace
%
% Using the above example, you'd access the second output argument
% of ismember by calling
% loc = accessIthOutput(@()ismember(A,B),2)
%# get the output
[output{1:ii}] = fun();
%# return the i-th element
out = output{ii};