来源:https://ww2.mathworks.cn/help/matlab/ref/find.html?searchHighlight=find&s_tid=doc_srchtitle

find

查找非零元素的索引和值

全页折叠
 

说明

示例

k = find(X) 返回一个包含数组 X 中每个非零元素的线性索引的向量。

  • 如果 X 为向量,则 find 返回方向与 X 相同的向量。

  • 如果 X 为多维数组,则 find 返回由结果的线性索引组成的列向量。

  • 如果 X 包含非零元素或为空,则 find 返回一个空数组。

示例

k = find(X,n) 返回与 X 中的非零元素对应的前 n 个索引。

示例

k = find(X,n,direction)(其中 direction'last')查找与 X 中的非零元素对应的最后 n 个索引。direction 的默认值为 'first',即查找与非零元素对应的前 n 个索引。

示例

[row,col] = find(___) 使用前面语法中的任何输入参数返回数组 X 中每个非零元素的行和列下标。

示例

[row,col,v] = find(___) 还返回包含 X 的非零元素的向量 v

 

示例

全部折叠

矩阵中的零和非零元素

在 3×3 矩阵中查找非零元素。

X = [1 0 2; 0 1 1; 0 0 4]
X = 3×3

     1     0     2
0 1 1
0 0 4
k = find(X)
k = 5×1

     1
5
7
8
9

X 使用逻辑 not 运算符以查找零值。

k2 = find(~X)
k2 = 4×1

     2
3
4
6
 
 

满足一个条件的元素

在 4×4 幻方矩阵中查找前五个小于 10 的元素。

X = magic(4)
X = 4×4

    16     2     3    13
5 11 10 8
9 7 6 12
4 14 15 1
k = find(X<10,5)
k = 5×1

     2
3
4
5
7

查看 X 的对应元素。

X(k)
ans = 5×1

     5
9
4
2
7
 
 

等于特定值的元素

要查找特定的整数值,请使用 == 运算符。例如,在 1×10 的奇整数向量中查找等于 13 的元素。

x = 1:2:20
x = 1×10

     1     3     5     7     9    11    13    15    17    19
k = find(x==13)
k = 7

要查找非整数值,请基于您的数据使用容差值。否则,由于浮点舍入误差有时会生成空矩阵。

y = 0:0.1:1
y = 1×11

         0    0.1000    0.2000    0.3000    0.4000    0.5000    0.6000    0.7000    0.8000    0.9000    1.0000
k = find(y==0.3)
k =

  1x0 empty double row vector
k = find(abs(y-0.3) < 0.001)
k = 4
 
 

最后几个非零元素

创建一个由等于零的所有奇数索引元素组成的 6×6 幻方矩阵。

X = magic(6);
X(1:2:end) = 0
X = 6×6

     0     0     0     0     0     0
3 32 7 21 23 25
0 0 0 0 0 0
8 28 33 17 10 15
0 0 0 0 0 0
4 36 29 13 18 11

查找四个非零值。

k = find(X,4,'last')
k = 4×1

    30
32
34
36
 
 

满足多个条件的元素

在 4×4 矩阵中查找前 3 个大于 0 且小于 10 的元素。指定两个输出以便将行和列下标返回到这些元素。

X = [18 3 1 11; 8 10 11 3; 9 14 6 1; 4 3 15 21]
X = 4×4

    18     3     1    11
8 10 11 3
9 14 6 1
4 3 15 21
[row,col] = find(X>0 & X<10,3)
row = 3×1

     2
3
4
col = 3×1

     1
1
1

第一个实例是 X(2,1),即 8

 
 

非零元素的下标和值

在 3×3 矩阵中查找非零元素。指定三个输出以返回行下标、列下标和元素值。

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

     3     2     0
-5 0 7
0 0 1
[row,col,v] = find(X)
row = 5×1

     1
2
1
2
3
col = 5×1

     1
1
2
3
3
v = 5×1

     3
-5
2
7
1
 
 

多维数组的下标

在 4×2×3 数组中查找非零元素。指定两个输出 rowcol 以返回非零元素的行和列下标。如果输入是多维数组 (N > 2),find 返回 col 作为 XN-1 个尾部维度的线性索引。

X = zeros(4,2,3);
X([1 12 19 21]) = 1
X =
X(:,:,1) = 1 0
0 0
0 0
0 0 X(:,:,2) = 0 0
0 0
0 0
1 0 X(:,:,3) = 0 1
0 0
1 0
0 0
[row,col] = find(X)
row = 4×1

     1
4
3
1
col = 4×1

     1
3
5
6
 
 

输入参数

全部折叠

X - 输入数组
标量 | 向量 | 矩阵 | 多维数组

输入数组,指定为标量、向量、矩阵或多维数组。如果 X 为空数组或不含非零元素,则 k 为空数组。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char
复数支持:

n - 要查找的非零元素数量
正整数标量

要查找的非零元素数量,指定为正整数标量。默认情况下,find(X,n) 查找 X 中的前 n 个非零元素。

direction - 搜索方向
'first' (默认) | 'last'

搜索方向,指定为字符串 'first''last'。使用 find(X,n,'last')X 中查找 n 个非零元素。

输出参数

全部折叠

k - 指向非零元素的索引
向量

指向非零元素的索引,以向量的形式返回。如果 X 是行向量,则 k 也是行向量。否则 k 是列向量。X 是空数组或不含非零元素时,k 为空数组。

可以使用 X(k) 返回 X 中的非零值。

row - 行下标
向量

行下标,以向量的形式返回。rowcol 一起指定与 X 中的非零元素对应的 X(row,col) 下标。

col - 列下标
向量

列下标,以向量的形式返回。rowcol 一起指定与 X 中的非零元素对应的 X(row,col) 下标。

如果 X 是多维数组且 N> 2,则 colXN-1 尾部维度的线性索引。这会保留关系 X(row(i),col(i)) == v(i)

v - X 的非零元素
向量

X 的非零元素,以向量的形式返回。

详细信息

全部折叠

线性索引

线性索引允许使用单个下标创建指向数组的索引,例如A(k)。MATLAB 将该数组视为单列向量,其中每一列附加到前一列的底部。因此,线性索引从上到下、从左到右对列中的元素编号。

例如,假设一个 3×3 矩阵。您可以用 A(5) 来引用 A(2,2) 元素,用 A(8) 来引用 A(2,3) 元素。线性索引根据数组大小而改变;A(5) 会为 3×3 矩阵和 4×4 矩阵返回不同位置上的元素。

sub2indind2sub 函数对于在下标和线性索引之间进行转换非常有用。

提示

  • 要查找符合条件的数组元素,请结合使用 find 和关系表达式。例如,find(X<5) 返回 X 中小于 5 的元素的线性索引。

  • 要直接查找 X 中满足条件 X<5 的元素,请使用 X(X<5)。尽量避免使用 X(find(X<5)) 之类的函数调用,因为这种调用中对逻辑矩阵使用的 find 完全没有必要。

  • findX>1 之类的关系运算结合在一起执行时,必须记住关系运算的结果是由 1 和 0 组成的逻辑矩阵。例如,命令 [row,col,v] = find(X>1) 会返回由 v 的逻辑值 1 (true) 组成的列向量。

  • 行下标和列下标,即 rowcolk×k = sub2ind(size(X),row,col) 中的线性索引相关。

扩展功能

tall 数组
对行数太多而无法放入内存的数组进行计算。

用法说明和限制:

  • X 必须是 tall 列向量。

有关详细信息,请参阅 tall 数组

C/C++ 代码生成
使用 MATLAB Coder 生成 C 代码和 C++ 代码。

用法说明和限制:

  • 如果可变大小输入在运行时变为行向量,代码生成将结束并报告错误。当输入为标量或可变长度行向量时,此限制不适用。

  • 对于可变大小输入,空输出(0×0、0×1 或 1×0)的形状取决于输入大小的上限。当输入数组在运行时为标量或 [] 时,输出可能与 MATLAB 不匹配。如果输入为可变长度行向量,则空输出的大小为 1×0。否则,大小为 0×1。

  • 生成的代码始终返回可变长度向量。即使您提供输出向量 k,输出也不是固定大小,因为输出可以包含少于 k 个元素。例如,find(x,1) 返回具有一个或零个元素的可变长度向量。

GPU 数组
通过使用 Parallel Computing Toolbox 在图形处理单元 (GPU) 上运行来加快代码执行。

此函数完全支持 GPU 数组。有关详细信息,请参阅Run MATLAB Functions on a GPU (Parallel Computing Toolbox)。

分布式数组
使用 Parallel Computing Toolbox 在群集的组合内存中对大型数组进行分区。

此函数完全支持分布式数组。有关详细信息,请参阅Run MATLAB Functions with Distributed Arrays (Parallel Computing Toolbox)。

在 R2006a 之前推出

matlab中find 查找非零元素的索引和值的更多相关文章

  1. MATLAB中求矩阵非零元的坐标

    MATLAB中求矩阵非零元的坐标: 方法1: index=find(a); [i,j]=ind2sub(size(a),index); disp([i,j]) 方法2: [i,j]=find(a> ...

  2. Matlab中K-means聚类算法的使用(K-均值聚类)

    K-means聚类算法采用的是将N*P的矩阵X划分为K个类,使得类内对象之间的距离最大,而类之间的距离最小. 使用方法:Idx=Kmeans(X,K)[Idx,C]=Kmeans(X,K) [Idx, ...

  3. matlab中fminbnd函数求最小或者组大值

    clc; clear all; close all; fx = @(x) -(0.4./sqrt(1 + x.^2) - sqrt(1+x.^2) .* (1- 0.4./(1 + x.^2))+x) ...

  4. matlab中find函数的使用说明

    matlab中如何统计一个矩阵M中零的个数 size(find(M==0),1) 原文:http://blog.sina.com.cn/s/blog_707b64550100rbh3.html fin ...

  5. matlab 中 find() 函数用法

    一. 功能: 寻找非零元素的索引和值 二.相关函数语法: ind = find(X) ind = find(X, k) ind = find(X, k, 'first') ind = find(X, ...

  6. matlab中矩阵的表示与简单操作

    原文地址为:matlab矩阵的表示和简单操作 一.矩阵的表示在MATLAB中创建矩阵有以下规则: a.矩阵元素必须在”[ ]”内: b.矩阵的同行元素之间用空格(或”,”)隔开: c.矩阵的行与行之间 ...

  7. matlab中 assert(any(mask(:)));

    首先,matlab中any函数:检测矩阵mask中是否有非零元素,如果有,返回1,:如果没有非零元素,即所有元素都是0,那么则返回0. assert()是一个调试程序时经常使用的宏,在程序运行时它计算 ...

  8. 学习笔记(1)---matlab中常见函数解析

    一.fscanf函数 matlab中函数fscanf在文件读取方面的实例如下: 从文件中有格式地读数据 fscanf 语法1:[a,count]=fscanf(fid,format,size) 根据指 ...

  9. matlab中imfinfo 有关图形文件的信息

    来源:https://ww2.mathworks.cn/help/matlab/ref/imfinfo.html?searchHighlight=imfinfo&s_tid=doc_srcht ...

随机推荐

  1. Android开发之ScrollView去掉右侧滚动条,gridview如何去掉外边框

    android:scrollbars="none" android:listSelector="@null"

  2. Codeforces Round #571 (Div. 2)-D. Vus the Cossack and Numbers

    Vus the Cossack has nn real numbers aiai. It is known that the sum of all numbers is equal to 00. He ...

  3. 为什么一个还没毕业的大学生能够把 IO 讲的这么好?

    Java IO 是一个庞大的知识体系,很多人学着学着就会学懵了,包括我在内也是如此,所以本文将会从 Java 的 BIO 开始,一步一步深入学习,引出 JDK1.4 之后出现的 NIO 技术,对比 N ...

  4. C# 获取当前月的月初和月末

    /// <summary> /// 获取当前月的月末日期 /// </summary> /// <returns></returns> public s ...

  5. Docker启动失败

    报错信息: Job for docker.service failed because the control process exited with error code. See "sy ...

  6. Zookeeper启动流程分析

    前言 之前的Zookeeper协议篇-Paxos算法与ZAB协议通过了解Paoxs算法开始,到Zab协议的两大特性:崩溃恢复和消息广播,学习了Zookeeper是如何通过Zab协议实现高可用,本篇主要 ...

  7. 亚马逊DRKG使用体验

    基于文章:探索「老药新用」最短路径:亚马逊AI Lab开源大规模药物重定位知识图谱DRKG,记录了该项目的实际部署与探索过程,供参考. 1. DRKG介绍 大规模药物重定位知识图谱 Drug Repu ...

  8. cannary

    canary是Linux为防止栈溢出的一种保护机制,接着我们分析glibc对canary的实现过程,首先给出跟canary相关的调用栈: security_init()  //在elf/rtld.c中 ...

  9. SSM框架中添加写日志功能

    前提:要导入log4j的jar包 在web.xml中输入: <!--日志加载--> <context-param> <param-name>log4jConfigL ...

  10. 内存管理初始化源码4:add_active_range

    我们在阅读源码时,函数功能可以分为两类:1. bootmem.c 2. page_alloc.c. 1. bootmem.c是关于bootmem allocator的,上篇文章已经简述过. 2. pa ...