当我第一次用matlab语言编写一个工程项目时,发现自己编写的脚本里循环特别多,导致编程效率很低,这让我特别苦恼。有一次导师让我阅读他编写的一个Matlab脚本,并按照新要求对其进行更改。我发现脚本里多次用到find()函数,猛然间豁然开朗,原来有大部分循环可以用find()函数解决!对我而言,find()函数是我从Matlab小白开始进阶的标志,仅以此文,献给find()函数!

  [1] find()函数基本功能

  find()函数的基本功能是返回向量或者矩阵中不为0的元素的位置索引。

 >> X = [   -     ];
>> ind = find(X) ind =

  其有多种用法,比如返回前k的不为0的元素:

 >> ind = find(X,)

 ind =

  也可以写成:

 >> ind = find(X,,'first')

 ind =

  返回后k个不为0的元素:

 >> ind = find(X,,'last')

 ind =

  若X是一个矩阵,索引该如何返回呢?

 >> X = [ - ;  ;  ]

 X =

          -     

 >> ind = find(X)

 ind =

  这是因为在Matlab在存储矩阵时,是一列一列存储的,我们可以做一下验证:

 >> X()

 ans =

     -

  假如你需要按照行列的信息输出该怎么办呢?

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

  如果你还需要输出具体的元素值:

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

  [2] 进阶技巧

  (1)find()函数的功能是找到向量或者矩阵中不为0的元素,那如果需要找到其中满足一定条件的元素,比如,等于4的元素该怎么办呢?

 >> X = [   -     ];
>> ind = find(X == ) ind =

  在Matlab中,有一个logical数据类型,和C++中的bool值相同。find()函数将logical值0也视为数值0,logical值1视为数值1,因此可以用上面的方法找到矩阵中满足一定条件的元素。

  (2)在程序中,我们经常会以向量中是否包含某一元素为判断条件,比如X中是否有等于9的元素,这时也可以应用find()函数:

>> if isempty(find(X == ))
log =
else
log =
end log =

  这里需要补充说明下,当输入中没有非0元素时,findf()返回一个空数组。

  [3] 高级技巧

  在进阶技巧(2)中,假如向量X的阶数很高,比如1000万维,如果我们用上面的方法,运行速度会很慢。仔细分析这个语句,我们其实并不希望找到X中等于9的全部元素,我们只想找到其中是否有等于9的元素,所以,我们只需作如下更改:

 isempty(find(X == ,))

  我们做一个小实验:

 X = randi(,,);
tic
for i = :
isempty(find(X == ));
end
toc

  输出是:

 Elapsed time is 1.954537 seconds.

  更改后:

 X = randi(,,);
tic
for i = :
isempty(find(X == ,));
end
toc

  输出为:

 Elapsed time is 0.757994 seconds.

  运行效率约是原来的2.5倍。

Matlab 之 find()函数的更多相关文章

  1. matlab中patch函数的用法

    http://blog.sina.com.cn/s/blog_707b64550100z1nz.html matlab中patch函数的用法——emily (2011-11-18 17:20:33) ...

  2. Matlab基本函数-conj函数

    Matlab基本函数-conj函数 1.conj函数:用于计算复数的共轭值 2.用法说明:y=conj(x)函数计算复数x的共轭值.输出结果y的维数跟输入x的维数一致,返回值为:real(y)-i*i ...

  3. 【原创】Matlab.NET混合编程技巧之找出Matlab内置函数

                  本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新    Matlab和C#混合编程文章目录 :[目录]Matlab和C#混合编程文章目录 Matlab与.N ...

  4. 【原创】Matlab.NET混合编程技巧之直接调用Matlab内置函数

                  本博客所有文章分类的总目录:[总目录]本博客博文总目录-实时更新    Matlab和C#混合编程文章目录 :[目录]Matlab和C#混合编程文章目录 在我的上一篇文章[ ...

  5. matlab画图形函数 semilogx

    matlab画图形函数 semilogx loglog 主要是学习semilogx函数,其中常用的是semilogy函数,即后标为x的是在x轴取对数,为y的是y轴坐标取对数.loglog是x y轴都取 ...

  6. 【matlab】设定函数默认参数

    C++/java/python系列的语言,函数可以有默认值,通常类似如下的形式: funtion_name (param1, param2=default_value, ...) 到了matlab下发 ...

  7. matlab中subplot函数的功能

    转载自http://wenku.baidu.com/link?url=UkbSbQd3cxpT7sFrDw7_BO8zJDCUvPKrmsrbITk-7n7fP8g0Vhvq3QTC0DrwwrXfa ...

  8. Matlab:max函数

    Matlab中max函数在矩阵中求函数大小的实例如下: C = max(A)返回一个数组各不同维中的最大元素.如果A是一个向量,max(A)返回A中的最大元素.如果A是一个矩阵,max(A)将A的每一 ...

  9. 【原创】Matlab中plot函数全功能解析

    [原创]Matlab中plot函数全功能解析 该帖由Matlab技术论(http://www.matlabsky.com)坛原创,更多精彩内容参见http://www.matlabsky.com 功能 ...

  10. Matlab自己定义函数

    Matlab提供了强大的函数库供用户调用,但也支持用户自定义函数.本文使用了范德堡大学教授Akos Ledeczi授课中的样例来一步步说明怎样在Matlab中自定义函数. 首先,在command wi ...

随机推荐

  1. 张小龙宣布微信小程序1月9日发布,并回答了大家最关心的8个问题

    2016 年 12 月 28 日,张小龙在微信公开课 PRO 版的会场上,宣布了微信小程序的正式发布时间. 微信小程序将于 2017 年 1 月 9 号正式上线. 同时他解释称,小程序就像PC时代的网 ...

  2. SQL Server常见问题介绍及快速解决建议

    前言 本文旨在帮助SQL Server数据库的使用人员了解常见的问题,及快速解决这些问题.这些问题是数据库的常规管理问题,对于很多对数据库没有深入了解的朋友提供一个大概的常见问题框架. 下面一些问题是 ...

  3. Handler

    1.1 继承AbstractController优点:能定制请求方式 package cn.happyl.controller; import javax.servlet.http.HttpServl ...

  4. ASP.NET MVC Model绑定(一)

    ASP.NET MVC Model绑定(一) 前言 ModelMetadata系列的结束了,从本篇开始就进入Model绑定部分了,这个系列阅读过后你会对Model绑定有个比较清楚的了解, 本篇对于Mo ...

  5. CSharpGL(21)用鼠标拾取、拖拽VBO图元内的点、线或本身

    CSharpGL(21)用鼠标拾取.拖拽VBO图元内的点.线或本身 效果图 以最常见的三角形网格(用GL_TRIANGLES方式进行渲染)为例. 在拾取模式为GeometryType.Point时,你 ...

  6. ABP源码分析二十:ApplicationService

    IApplicationService : 空接口,起标识作用.所有实现了IApplicationService 的类都会被自动注入到容器中.同时所有IApplicationService对象都会被注 ...

  7. TODO:这是一个我的自媒体

    TODO:这是一个我的自媒体 自媒体(外文名:We Media)又称"公民媒体"或"个人媒体",是指私人化.平民化.普泛化.自主化的传播者,以现代化.电子化的手 ...

  8. java遇到 Check $M2_HOME 问题 解决-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match.

    步骤: 1.添加M2_HOME的环境变量 2.Preference->Java->Installed JREs->Edit 选择一个jdk 3.添加 -Dmaven.multiMod ...

  9. SharedPreferences 的另一种场景的用法

    SharedPreferences 的另一种场景的用法 昨天,下班在家想做什么来着,然后想用SharedPreferences存点数据,但是不知道咋地突然想到,SharedPreferences是应用 ...

  10. Atitit opencv版本新特性attilax总结

    Atitit opencv版本新特性attilax总结 1.1. :OpenCV 3.0 发布,史上功能最全,速度最快的版1 1.2. 应用领域2 1.3. OPENCV2.4.3改进 2.4.2就有 ...