我在维度A
的Matlab中有一个单元格1x3
,例如
A={{1,2,3,4} {5,6} {7,8,9} }
A
按升序包含1
到n
的所有整数。在示例n=9
中。但是,每个子小区内的元素数量可以不同。每个子单元都是非空的。
考虑维度B
的向量nx1
,其中包含从1
到n
的一些整数,按升序排列(允许重复),例如
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]'
答案 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;