5
A = {'A'; 'E'; 'A'; 'F'};

B = {'A';'B';'C';'D';'E'; 'F'};

我试图为单元格数组中的每个字符串获取与单元格数组A中该字符串匹配的索引BA会有重复的值,B不会。

find(ismember(B, A) == 1)

输出

1
5
6 

但我想得到

1
5
1
6

最好在一个衬里。我也不能使用 strcmp 代替 ismember 因为向量的大小不同。

向量实际上将包含日期字符串,并且我需要索引而不是逻辑索引矩阵,我对不将其用于索引的数字感兴趣。

我该怎么做?

4

1 回答 1

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};
于 2012-07-19T13:54:45.917 回答