在Matlab中比较一个单元格和一个向量

Comparing a cell with a vector in Matlab

我在 Matlab 中有一个维度 1x3 的单元格 A,例如

A={{1,2,3,4} {5,6} {7,8,9} }

A 包含从 1n 的所有整数,按升序排列。在示例中 n=9。但是,每个子单元内的元素数量可以不同。每个子单元格都是非空的。

考虑维度 nx1 的向量 B,其中包含一些从 1n 的整数,按升序排列(允许重复),例如

B=[1 1 2 2 4 7 7 8 9]'

我想构造(不使用循环)维度 nx1 的向量 C 以便每个 C(i) 告诉 A [=27] 的哪个子单元=] 属于。在例子中

C=[1 1 1 1 1 3 3 3 3]'

我不知道它是否比 for 循环快,但是

怎么样
C = arrayfun(@(b) find(cellfun(@(a) any(cell2mat(a) == b), A)), B);

解释:选取B中的每个元素b;然后选择 A 中的每个子单元 a 并检查与 b 是否相等,return 子单元的索引 bb 的成员。

采用该结构,A由其每个单元格的元素个数唯一确定,可以得到结果

C = sum(bsxfun(@gt, B, cumsum(cellfun(@numel, A))), 2)+1;