A = [5 10 16 22 28 32 36 44 49 56]
B = [2 1 1 2 1 2 1 2 2 2]
如何获得这个?
C1 = [10 16 28 36]
C2 = [5 22 32 44 49 56]
C1
需要从A
获取值,仅在B
为1
的位置
C2
需要从A
获取值,仅在B
为2
答案 0 :(得分:2)
要使用任意数量的组(不仅仅是示例中的两个)来实现此目的,请使用带有anoynmous函数的accumarray
将每个组中的值收集到一个单元格中。要preserve order,B
需要先排序(并且需要将相同的顺序应用于A
):
[B_sort, ind_sort] = sort(B);
C = accumarray(B_sort.', A(ind_sort).', [], @(x){x.'});
这将在单元格数组中显示结果:
>> C{1}
ans =
10 16 28 36
>> C{2}
ans =
5 22 32 44 49 56