A = [5 10 16 22 28 32 36 44 49 56]
B = [2 1 1 2 1 2 1 2 2 2]
如何得到它?Matlab:基於矢量B中的值從矢量A提取值
C1 = [10 16 28 36]
C2 = [5 22 32 44 49 56]
C1
需要從A
得到的值,僅在B
是1
C2
需要從A
獲取值的位置,僅在B
是2
A = [5 10 16 22 28 32 36 44 49 56]
B = [2 1 1 2 1 2 1 2 2 2]
如何得到它?Matlab:基於矢量B中的值從矢量A提取值
C1 = [10 16 28 36]
C2 = [5 22 32 44 49 56]
C1
需要從A
得到的值,僅在B
是1
C2
需要從A
獲取值的位置,僅在B
是2
您可以將位置這樣做:
C1 = A(B==1);
C2 = A(B==2);
B==1
給出一個日誌ical array:[ 0 1 1 0 1 0 1 0 0 0 ]
。
A(logicalArray)
返回值爲logicalArray
的元素爲true
(它被稱爲邏輯索引)。 A
和logicalArray
當然必須具有相同的尺寸。
這可能是在matlab中做這個操作的最快方法。
有關索引的更多信息,請參見matlab documentation。
要與基(而不是兩個如在你的例子)的任意數量達到這個目的,使用accumarray
具有一個anoynmous函數來收集各組中的值到細胞中。到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