发现在单元阵列的所有(非唯一)元素的索引,因为它们出现在第二(排序的和独特的)单元阵列(Find i

2019-06-26 09:40发布

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的无论是作为载体的大小不同。

载体实际上将包含日期字符串,我需要索引不是一个逻辑索引矩阵,我感兴趣的是使用它的索引数。

我该怎么做?

Answer 1:

你翻转的论点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};


文章来源: Find index of all (non-unique) elements in a cell array as they appear in a second (sorted and unique) cell array