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. index= find(X)

    找出矩阵X中的所有非零元素,并将这些元素的线性索引值(linear indices:按列)返回到向量index中。

    如果X是一个行向量,则index是一个行向量;否则,index是一个列向量。

    如果X不含非零元素或是一个空矩阵,则index是一个空矩阵。

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

    找到前K个不为0的线性索引值。k必须是一个正数,但是它可以是任何 数字数值类型。

  3. index = find(X, k, \'last\')

    找到后k个不为零元素的线性索引值。

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

    返回矩阵X中非零元素的行和列的索引值。这个语法对于处理稀疏矩阵 尤其有用。

    如果X是一个N(N>2)维矩阵,col包括列的线性索引。

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

    返回X中非零元素的一个列或行向量v,同时返回行和列的索引值。如果X是一个逻辑表示,则v是一个逻辑矩阵。输出向量v包含通过评估X表示得到的逻辑矩阵的非零元素。

四、解释

I.用法一:

b=find(a),a是一个矩阵,查询非零元素的位置,如果X是一个行向量,则返回一个行向量;否则,返回一个列向量。如果X全是零元素或者是空数组,则返回一个空数组,例子如下所示,也可以用b=find(a>2),这句的意思是在a中找到比较2大的元素

a=[1 3;0 4]
b=find(a)

输出

a =

 1     3
 0     4

b =

 1
 3
 4

解释一下为什么会得到b的值

a(1)

ans =

 1


 a(2)

ans =

 0

II.用法二:

b=find(a,2),找出a中最先出现的2个不为零的数,a是你所要找的矩阵,2参数是指数量所下

a=[1 3;0 4]
b=find(a,2)

输出

a =

 1     3
 0     4

b =

 1
 3

III.用法三:

c=find(a,2,\'first\')用法和二基本一样,如下

a=[1 3;0 4]
b=find(a,2,\'first\')

输出

a =

 1     3
 0     4

b =

 1
 3

IV.用法四:

c=find(a,2,\'last\') 这句的意思是从最后一个非零元素起,找2个不为零的元素,如下

a=[1 3;0 4]
b=find(a,2,\'last\')

输出

a =

 1     3
 0     4

b =

 3
 4   

V.用法五:

[a1,a2]=find(a),找出a矩阵中非零元素所在行和列,并存在a1,a2中

a=[1 3;0 4]
[a1,a2]=find(a)

输出

a =

 1     3
 0     4

a1 =

 1
 1
 2

a2 =

 1
 2
 2

VI.用法六:

[a1,a2,v]=find(a),找出矩阵中非零元素所在行和列,并存在a1,a2中,并将结果放在v中,如下所示,这个得到的v是a中第几行第几列的**非零**元素

a=[1 3;0 4]
[a1,a2,val]=find(a)

输出

a =

 1     3
 0     4

a1 =

 1
 1
 2

a2 =

 1
 2
 2

val =

 1
 3
 4

VII.用法七:

[a1,a2,val]=find(a>2),返回一个单位列向量,这里不满足a>2,如下所示

a=[1 3;0 4]

[a1,a2,val]=find(a>2)

a =

 1     3
 0     4

a1 =

 1
 2

a2 =

 2
 2

val =

2×1 logical 数组

1

1

val就是说矩阵中第1行第2列和第2行第2列的元素满足X>2为真用1来表示。

注意一下VI与VII的区别

X = [4 2 0; -4 0 6; 0 0 2]
[a1,a2,val1]=find(X)
[a3,a4,val2]=find(X>2)

输出

X =

 4     2     0
-4     0     6
 0     0     2

a1 =

 1
 2
 1
 2
 3

a2 =

 1
 1
 2
 3
 3

val1 =

 4
-4
 2
 6
 2

a3 =

 1
 2

a4 =

 1
 3

val2 =

2×1 logical 数组

1

1

*注意val1的值。