Matlab 查找单元格数组中所有(非唯一)元素在第二个(已排序且唯一)单元格数组中出现时的索引

Matlab 查找单元格数组中所有(非唯一)元素在第二个(已排序且唯一)单元格数组中出现时的索引,matlab,find,cell-array,Matlab,Find,Cell Array,我试图为单元格数组A中的每个字符串获取与单元格数组B中该字符串匹配的索引A将具有重复值,B将不具有重复值 A = {'A'; 'E'; 'A'; 'F'}; B = {'A';'B';'C';'D';'E'; 'F'}; 输出 find(ismember(B, A) == 1) 但是我想 1 5 6 最好是在一个班轮。我不能用strcmp代替ismember,因为向量大小不同 向量实际上包含日期字符串,我需要的是索引而不是逻辑索引矩阵,我感兴趣的是数字而不是用于索引 如何操作?将参数翻

我试图为单元格数组
A
中的每个字符串获取与单元格数组
B
中该字符串匹配的索引<代码>A将具有重复值,
B
将不具有重复值

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

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

find(ismember(B, A) == 1)
但是我想

1
5
6 
最好是在一个班轮。我不能用strcmp代替ismember,因为向量大小不同

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


如何操作?

将参数翻转到
ismember
,然后使用第二个输出参数:

1
5
1
6
第二个输出告诉您
A
的元素在
B
中的位置

如果您对代码中可以包含的行数有非常严格的限制,并且无法解雇施加这些限制的经理,那么您可能希望直接访问
ismember
的第二个输出。为了做到这一点,您可以创建以下helper函数,该函数允许直接访问函数的第i个输出

[~,loc]=ismember(A,B)

loc =

     1
     5
     1
     6

我能用这个吗?post EitanT deleted可以完美地内联工作,这更简单,但我可以在一行中执行类似“ScalarC-loc”的操作吗?@Dan:你不能,除非你像我刚才在编辑中所做的那样定义一个帮助函数。很酷,谢谢,不,我会坚持使用两行方法。我没有这样的限制,但作为旁白,谁有资格解雇他们的上级?我可以取消删除我的答案,但这个解决方案是正确的答案+对乔纳斯来说是1。@Dan:通常情况下,似乎强加一句俏皮话的“上级”都是编码员自己,大脑中那个愚蠢的声音可以通过一些努力被激发出来。
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};