find()matlab,Matlab 之 find()函数

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

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

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

131379937_1_20180427044722800.gif

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

2 >> ind = find(X)

3

4 ind =

5

6 1 3 4 8 9

131379937_1_20180427044722800.gif

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

1 >> ind = find(X,2)

2

3 ind =

4

5 1 3

也可以写成:

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

2

3 ind =

4

5 1 3

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

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

2

3 ind =

4

5 8 9

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

131379937_1_20180427044722800.gif

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

2

3 X =

4

5 1 -3 0

6 0 0 8

7 4 0 6

8

9 >> ind = find(X)

10

11 ind =

12

13 1

14 3

15 4

16 8

17 9

131379937_1_20180427044722800.gif

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

1 >> X(4)

2

3 ans =

4

5 -3

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

131379937_1_20180427044722800.gif

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

r =

1

3

1

2

3

c =

1

1

2

3

3

131379937_1_20180427044722800.gif

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

131379937_1_20180427044722800.gif

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

2 r =

3 1

4 3

5 1

6 2

7 3

8

9 c =

10 1

11 1

12 2

13 3

14 3

15

16 v =

17 1

18 4

19 -3

20 8

21 6

131379937_1_20180427044722800.gif

[2] 进阶技巧

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

131379937_1_20180427044722800.gif

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

2 >> ind = find(X == 4)

3

4 ind =

5

6 3

131379937_1_20180427044722800.gif

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

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

131379937_1_20180427044722800.gif

>> if isempty(find(X == 9))

log = 0

else

log = 1

end

log =

0

131379937_1_20180427044722800.gif

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

[3] 高级技巧

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

1 isempty(find(X == 9,1))

我们做一个小实验:

131379937_1_20180427044722800.gif

1 X = randi(100,1,10000000);

2 tic

3 for i = 1:100

4 isempty(find(X == 9));

5 end

6 toc

131379937_1_20180427044722800.gif

输出是:

1 Elapsed time is 1.954537 seconds.

更改后:

131379937_1_20180427044722800.gif

1 X = randi(100,1,10000000);

2 tic

3 for i = 1:100

4 isempty(find(X == 9,1));

5 end

6 toc

131379937_1_20180427044722800.gif

输出为:

1 Elapsed time is 0.757994 seconds.

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/496326.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Data JPA 从入门到精通~自定义实现Repository

EntityManager 的获取方式 我们既然要自定义,首先讲一下 EntityManager 的两种获取方式。 1. 通过 PersistenceContext 注解。 通过将 PersistenceContext 注解标注在 EntityManager 类型的字段上,这样得到的 EntityManager 就是容器管理的 EntityMan…

一图看懂阿里云IoT战略

来源:云栖社区从万物互联到万物智联,离不开“无处不在的计算”。阿里云IoT在云边端部署了可协同的计算,基于物联网使能平台联合开发者、芯片模组厂商、行业合作伙伴等在城市、生活、汽车、制造四大领域已完成深度布局,即一朵云、两…

matlab机器人模型仿真,一知半解|MATLAB机器人建模与仿真控制(1)

各位机器人技术爱好者们,大家好!很荣幸受古月老师邀请,成为古月居的签约作者。希望在这里可以同大家相互交流与学习。始终觉得自己能力不足,但终于还是硬着头皮开始了在古月居的第一篇博客。由于我是机械专业出身,在接…

第四期《Summer Tree》 已经整理完毕

虽然已经整理完毕,但是却没有空间上传,由于太大了上传不了.下次再补充回来 如果地址下载不到,告诉我。呵呵 我上传在微软共享空间里面 在这里可以下载在这里转载于:https://www.cnblogs.com/hero82748274/archive/2009/06/06/1497771.html

研究报告:城市大脑的起源、现状与未来趋势

报告撰写人:刘锋 《互联网进化论》作者,计算机博士2009年1月,IBM公司首席执行官彭明盛首次提出“智慧地球”,建议政府投资新一代的智慧型基础设施。此后智慧城市建设在世界范围内展开,在中国有上百个地区提出建设“智慧…

Spring Data JPA 从入门到精通~实际工作的应用场景

在实际工作中,有哪些场景会用到自定义 Repository 呢,这里列出几种实际在工作中的应用案例。 1. 逻辑删除场景 可以用到上面说的两种实现方式,如果有框架级别的全局自定义 Respository 那就在全局实现里面覆盖默认 remove 方法,…

Linux IO - 同步,异步,阻塞,非阻塞

From:http://blog.csdn.net/historyasamirror/article/details/5778378 同步/异步,阻塞/非阻塞概念深度解析:http://blog.csdn.net/lengxiao1993/article/details/78154467 知乎上关于 阻塞和非阻塞、同步和异步 之间区别的生动解释。 htt…

java treeset比较,java中TreeSet的两种排序比较的方式

第一种是使得元素具有比较性第二种是让集合具有比较性具体代码步骤如下:import java.util.*;/** TreeSet:可以自动对对集合中的元素进行排序* 第一种比较方式* 步骤:* 1.让元素对象的类具有比较性,并实现Comparable接口* 2.对其中…

在 IE 中使用 HTML5 元素

一个HTML5范本 <html><head><style>blah {color:red;}</style></head><body><blah>Hello!</blah></body></html>一个简洁的 方法 让样式在 IE 中作用到未知的元素上——仅需 JS 创建此未知元素即可&#xff1a; &…

微软 AI 设计原则:成为弱者,再带来惊喜

来源&#xff1a;36Kr 作者&#xff1a;木木子编者按&#xff1a;AI设计的思路是什么&#xff1f;更完美&#xff1f;更能想用户之所想&#xff1f;本文作者Cliff Kuang在“The company studied personal assistants–human ones–to understand how to make a great machine…

vim 中的杀手级插件: vundle (vim 插件管理器)

From&#xff1a;http://zuyunfei.com/2013/04/12/killer-plugin-of-vim-vundle/ vundle.txt&#xff1a;https://github.com/VundleVim/Vundle.vim/blob/master/doc/vundle.txt Vundle 的具体介绍和配置&#xff1a;github repo&#xff1a;https://github.com/gmarik/vundl…

同步锁 php,python线程中同步锁详解

这篇文章主要为大家详细介绍了python线程中同步锁的相关资料&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下在使用多线程的应用下&#xff0c;如何保证线程安全&#xff0c;以及线程之间的同步&#xff0c;或者访问共享变量等问题是十分棘手的问题&a…

移动平均线分析法

移动平均线分析法是由道琼斯股价理论演变出来的一种股价趋势分析方法。其基本思想是消除股价随机波动的影响&#xff0c;以寻求股价波动的趋势。主要特点&#xff1a;1、追踪趋势&#xff1a;MA能够表示股价波动的趋势&#xff0c;并追踪这个趋势不轻易改变。2、滞后性&#xf…

Spring Data JPA 从入门到精通~Auditing及其事件详解

Auditing 及其事件详解 Auditing 翻译过来是审计和审核&#xff0c;Spring 的优秀之处在于帮我们想到了很多繁琐事情的解决方案&#xff0c;我们在实际的业务系统中&#xff0c;针对一张表的操作大部分是需要记录谁什么时间创建的&#xff0c;谁什么时间修改的&#xff0c;并且…

未来城市的无人机送货系统是怎样的?

来源&#xff1a; 资本实验室 作者&#xff1a;李鑫Siri通过移动应用下了一盒巴克拉拉面膜的订单&#xff0c;电商平台收到信息&#xff0c;发指令给最近的送货驳船。驳船上的无人机获取货物包裹后直接飞向Siri家。在不到8分钟的飞行后&#xff0c;无人机来到位于12层的Siri家…

Vim自动补全神器:YouCompleteMe

From&#xff1a;http://www.jianshu.com/p/d908ce81017a github 地址&#xff1a;https://github.com/Valloric/YouCompleteMe YouCompleteMe is a fast, as-you-type, fuzzy-search code completion engine for Vim. 参考&#xff1a; https://github.com/Valloric/YouCom…

故障树分析法MATLAB,故障树分析(FTA)方法及其基于VC的软件设计的研究

故障树分析法(FTA)是一种评价复杂系统可靠性与安全性的重要方法。经过近四十年的发展,FTA技术已经有相对成熟的理论,但是在FTA的组合爆炸困难(计算量随故障树规模指数增长)、相关底事件的FTA 等方面还有待于进一步的研究。而且随着系统复杂性的加大,系统所含部件愈来愈多,研究系…

Windows 7硬盘安装方法大全

Windows 7硬盘安装方法大全&#xff0c;共整理出四种方法该Windows 7硬盘安装方法大全介绍了Windows 7下安装高版本的Windows 7&#xff0c;Vista下硬盘安装Windows 7&#xff0c;xp下硬盘安装Windows7等方法&#xff01; 一、 windows 7 系统下全新安装高版Windows7&#xff1…

对比 | 欧洲、美国、中国智慧城市的不同实践路径

来源&#xff1a;《上海城市规划》2018年第1期《欧美智慧城市最新实践与参考》作者&#xff1a;刘杨 龚烁 刘晋媛随着ICT、大数据、物联网等各类新兴技术的不断发展&#xff0c;智慧城市的运营和实践也不断趋于成熟。通过整理欧美各大典型智慧城市的最新实践案例&#xff0c;总…

C++ 使用 TinyXml 解析 XML 文件

知乎 C解析xml有什么好用的轮子? &#xff1a;https://www.zhihu.com/question/32046606 TinyXML-2 的 github地址和帮助文档&#xff1a;https://github.com/leethomason/tinyxml2 tinyxml 下载地址&#xff1a;https://sourceforge.net/projects/tinyxml/ *Please Note*…