2016-11-24 167 views

回答

3

您可以將位置這樣做:

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(它被稱爲邏輯索引)。 AlogicalArray當然必須具有相同的尺寸。

這可能是在matlab中做這個操作的最快方法。

有關索引的更多信息,請參見matlab documentation

2

要與基(而不是兩個如在你的例子)的任意數量達到這個目的,使用accumarray具有一個anoynmous函數來收集各組中的值到細胞中。到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