在Matlab中将单元格与向量进行比较

时间:2015-06-23 18:47:42

标签: arrays matlab cell-array

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

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

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

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

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

我想构建(不使用循环)维度C的向量nx1,以便每个C(i)告诉A B(i)的哪个子单元格属于。在示例中

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

2 个答案:

答案 0 :(得分:0)

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

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

说明:选择b中的每个元素B;然后选择a中的每个子单元格A并检查与b的相等性,返回子单元格的索引b是其成员。

答案 1 :(得分:0)

使用该结构,A由其每个单元格的元素数量唯一确定,结果可以作为

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