天天看點

MATLAB中find函數詳解

功能:

    尋找非零元素的索引和值

文法:

1.  ind = find(X)

2.  ind = find(X, k)

3.  ind = find(X, k, 'first')

4.  ind = find(X, k, 'last')

5.  [row,col] = find(X, ...)

6.  [row,col,v] = find(X, ...)

說明:

1.  ind = find(X)   

     找出矩陣X中的所有非零元素,并将這些元素的線性索引值(linear indices:按列)傳回到向量ind中。

     如果X是一個行向量,則ind是一個行向量;否則,ind是一個列向量。

     如果X不含非零元素或是一個空矩陣,則ind是一個空矩陣。

2.  ind = find(X, k) 或 3.  ind = find(X, k, 'first')

   找到前K個不為0的線性索引值。k必須是一個正數,但是它可以是任何數字數值類型。

4. ind = find(X, k, 'last')

     找到後k個不為零元素的線性索引值。

5.  [row,col] = find(X, ...)

    傳回矩陣X中非零元素的行和列的索引值。這個文法對于處理稀疏矩陣尤其有用。

    如果X是一個N(N>2)維矩陣,col包括列的線性索引。

    例如,一個5*7*3的矩陣X,有一個非零元素X(4,2,3),find函數将傳回row=4和col=16。也就是說,(第1頁有7列)+(第2頁有7列)+(第3頁有2列)=16。??

6.  [row,col,v] = find(X, ...)

      傳回X中非零元素的一個列或行向量v,同時傳回行和列的索引值。如果X是一個邏輯表示,則v是一個邏輯矩陣。輸出向量v包含通過評估X表示得到的邏輯矩陣的非零元素。

例如,

A= magic(4)

A =

    16     2     3    13

     5    11    10     8

     9     7     6    12

     4    14    15     1

[r,c,v]= find(A>10);

r', c', v'

ans =

     1     2     4     4     1     3          (按列)

ans =

     1     2     2     3     4     4         (按列)

ans =

     1     1     1     1     1     1

這裡傳回的向量v是一個邏輯矩陣,它包含N個非零元素,N=(A>10)

舉例:

例1

X = [1 0 4 -3 0 0 0 8 6];

indices = find(X)

傳回X中非零元素的線性索引值。

indices =

     1     3     4     8     9

例2

你可以用一個邏輯表達方式定義X。例如

    find(X > 2)

傳回X中大于2的元素的相對應的線性索引值。

ans =

     3     8     9

例3

下面find指令

X = [3 2 0; -5 0 7; 0 0 1];

[r,c,v] = find(X)

傳回X中非零元素行索引值的向量

r =

     1

     2

     1

     2

     3

X中非零元素列索引值的向量

c =

     1

     1

     2

     3

     3

包含X中非零元素的向量

v =

     3

    -5

     2

     7

     1     (按列)

例4

下清單示

[r,c,v] = find(X>2)

傳回包含X中非零元素的行索引值的向量

r =

     1

     2

包含X中非零元素的列索引值的向量

c =

     1

     3

包含N=(X>2)非零元素的邏輯矩陣

v =

     1

     1

記住,當你用find指令處理一個邏輯表達的時候,輸出向量v不包含輸入矩陣的非零元素的索引值。而是包含評估邏輯表達之後傳回的非零值。

例5

在向量上的一些操作

x = [11  0  33  0  55]';

find(x)

ans =

     1

     3

     5 

find(x == 0)

ans =

     2

     4 

find(0 < x & x < 10*pi)

ans =

     1

例6

對于矩陣

M = magic(3)

M =

     8     1     6

     3     5     7

     4     9     2

find(M > 3, 4)

傳回前四個M>3的索引值

ans =

     1

     3

     5

     6

例7

如果X是一個全零向量,find(X)傳回一個空矩陣。

例如indices = find([0;0;0])

indices =

   Empty matrix: 0-by-1