Matlab:根据向量B中的值从向量A中提取值

时间:2016-11-24 19:41:09

标签: arrays matlab

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获取值,仅在B1的位置 C2需要从A获取值,仅在B2

的位置

1 个答案:

答案 0 :(得分:2)

要使用任意数量的组(不仅仅是示例中的两个)来实现此目的,请使用带有anoynmous函数的accumarray将每个组中的值收集到一个单元格中。要preserve orderB需要先排序(并且需要将相同的顺序应用于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