zoukankan      html  css  js  c++  java
  • 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的值。

  • 相关阅读:
    搭建 structs2 环境
    数据库基础
    好书推荐整理
    Java 完美判断中文字符
    中文在unicode中的编码范围
    [转载]爬虫的自我解剖(抓取网页HtmlUnit)
    web应用配置
    简单的Java Web服务器
    dos基本命令
    Unrecognized Windows Sockets error: 0: JVM_Bind
  • 原文地址:https://www.cnblogs.com/qw-blog/p/12343711.html
Copyright © 2011-2022 走看看