1. 程式人生 > >matlab中的unique函式詳解

matlab中的unique函式詳解

C = unique(A):返回的是和A中一樣的值,但是沒有重複元素。產生的結果向量按升序排序。

示例:
1.篩除向量中的重複值,產生的結果按升序排列

Define a vector with a repeated value.
A = [9 2 9 5];
Find the unique values of A.
C = unique(A)
C =
     2     5     9

2.如果A是一個數組,那麼返回的是A不重複的行。陣列C的行是按順序排列的。

Name = {'Fred';'Betty';'Bob';'George';'Jane'};
Age = [38;43;38;40;38];
Height
= [71;69;64;67;64]; Weight = [176;163;131;185;131]; A = table(Age,Height,Weight,'RowNames',Name) A = Age Height Weight ___ ______ ______ Fred 38 71 176 Betty 43 69 163 Bob 38 64 131 George 40 67 185 Jane 38 64 131 Find the unique rows of A. C
= unique(A) C = Age Height Weight ___ ______ ______ Bob 38 64 131 Fred 38 71 176 George 40 67 185 Betty 43 69 163

注:
行(Jane 38 64 131)與 (Bob 38 64 131 )重複,被刪除。
根據第一個變數(年齡),然後是第二個變數(高度)進行排序,返回一個有序的行。

3.獲得非重複值及其下標

Define a vector with a repeated value.
A = [9 2 9 5];
Find the unique values of A and the index vectors ia and ic, such that C = A(ia) and A = C(ic).
[C, ia, ic] = unique(A)
C =
     2     5     9
ia =

     2
     4
     1
ic =

     3
     1
     3
     2

注:ia是指C中元素(2 5 9)在矩陣A中的位置;ic是指A中元素(9 2 9 5)在矩陣C中的位置。

4.獲得矩陣中非重複的行

Define a matrix with a repeated row.

A = [9 2 9 5; 9 2 9 0; 9 2 9 5];
Find the unique rows of A and the index vectors ia and ic, such that C = A(ia,:) and A = C(ic,:).

[C, ia, ic] = unique(A,'rows')
C =

     9     2     9     0
     9     2     9     5


ia =

     2
     1


ic =

     2
     1
     2

注:C = A(ia,:),即A中哪兩行構成了C;A = C(ic,:),即C中哪三行構成了A。
ia,ic表示行的下標。

5.篩除向量中的重複值,產生的結果不排序

Use the setOrder argument to specify the ordering of the values in C.

Specify 'stable' if you want the values in C to have the same order as in A.

A = [9 2 9 5];
[C, ia, ic] = unique(A,'stable')
C =

     9     2     5


ia =

     1
     2
     4


ic =

     1
     2
     1
     3

注:用unique(A,’stable’)去重複後不排序。預設的排序是unique(A,’sorted’),’sorted’一般省略掉了。

6.對於含有NaN(Not a Numbe:無窮與非數值)的數列,unique函式將如何處理呢?

Define a vector containing NaN.

A = [5 5 NaN NaN];
Find the unique values of A.

C = unique(A)
C =

     5   NaN   NaN

注:unique函式將NaN視為不同的元素。

7.字串元胞陣列的非重複項

Define a cell array of strings.

A = {'one','two','twenty-two','One','two'};
Find the unique strings contained in A.

C = unique(A)
C = 

    'One'    'one'    'twenty-two'    'two'

注:unique函式可識別字符串相同與否,分大小寫。

8.帶拖尾空白的字串元胞陣列
定義一個字串陣列,一個字串,其中一些字串有拖尾的空白。

A = {'dog','cat','fish','horse','dog ','fish '};
Find the unique strings contained in A.

C = unique(A)
C = 

    'cat'    'dog'    'dog '    'fish'    'fish '    'horse'

unique函式將帶拖尾的空白的字串陣列視為不同的字元。如這裡的’fish’ ‘fish ‘。

9.之前獲得元素下標都是元素第一次出現的下標,用legacy獲取元素最後一次出現的下標。

Use the 'legacy' flag to preserve the behavior of unique from R2012b and prior releases in your code.

Find the unique elements of A with the current behavior.

A = [9 2 9 5];
[C1, ia1, ic1] = unique(A)
C1 =

     2     5     9


ia1 =

     2
     4
     1


ic1 =

     3
     1
     3
     2

Find the unique elements of A, and preserve the legacy behavior.

[C2, ia2, ic2] = unique(A, 'legacy')
C2 =

     2     5     9


ia2 =

     2     4     3


ic2 =

     3     1     3     2

注:legacy的作用是取重複值最後一次出現的角標。