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,一经查实,立即删除!

相关文章

一图看懂阿里云IoT战略

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Vim自动补全神器:YouCompleteMe

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

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

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

C++ 使用 TinyXml 解析 XML 文件

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

定制自己的Windows CE 5.0 ARM中文模拟器(转)

定制自己的Windows CE 5.0 ARM中文模拟器(转)http://showvi.com/Blog/ViewAirticle/59一、生成OS 1. 安装Windows CE 5.0(记得CPU类型里把ARMV4I选上)装完之后装DeviceEmulatorBSP.msi,这是ARMV4I模拟器的BSP。 我补充个DeviceEmulatorBSP.ms…

人工智能即服务 当人工智能遇到云计算

来源:企业网为了在竞争中保持领先地位,越来越多的企业正在寻求将人工智能技术整合到其应用程序、产品、服务,以及大数据分析方法中。而企业开始使用人工智能技术的最简单和最流行的方法之一是使用基于云计算的人工智能即服务产品。根据调研机…

Linux 文件 IO

参考:http://blog.csdn.net/wanxiao009/article/details/5648583 C 和 C 文件操作详解:http://blog.csdn.net/freeking101/article/details/60959624 标准IO与文件IO 的区别:http://blog.csdn.net/big_bit/article/details/51804391 参考…

Spring Data JPA 从入门到精通~默认数据源的讲解

默认数据源 spring.datasource.driver-class-namecom.mysql.jdbc.Driver spring.datasource.urljdbc:mysql://127.0.0.1:3306/test?useSSLfalse spring.datasource.usernameroot spring.datasource.password123456 但是在实际工作中不可能这么简单,因为会用其他数…

国内AI芯片百家争鸣,何以抗衡全球技术寡头

来源:中国科学院自动化研究所 作者:吴军宁如果说 2016 年 3 月份 AlphaGo 与李世石的那场人机大战只在科技界和围棋界产生较大影响的话,那么 2017 年 5 月其与排名第一的世界围棋冠军柯洁的对战则将人工智能技术推向了公众视野。阿尔法狗&am…

zabbix php 5.6 安装配置,CentOS 5.6下Zabbix 1.8.5 服务端安装部署

CentOS 5.6下Zabbix 1.8.5 服务端安装部署CentOS 5.6 x86_64 Zabbix 1.8.5IP:192.168.88.130一、安装LAMP环境依赖包:# yum install MySQL-server mysql-devel libcurl-devel net-snmp-devel php php-gd php-xml php-mysql php-mbstring php-bcmath httpd curl-dev…

Linux系统编程——I/O多路复用select、poll、epoll

参考:https://segmentfault.com/a/1190000003063859 Linux下的I/O复用与epoll详解:https://www.cnblogs.com/lojunren/p/3856290.html 彻底学会 epoll 系列:http://blog.chinaunix.net/uid/28541347/sid-193117-list-1.htm Linux下I/O多路复用…

谷歌X实验室的“无用”发明

来源:OFweek人工智能网摘要:作为想要改变世界的科技界钢铁侠,谷歌自诞生起就发明无数。1999年,公司创始人拉里佩奇用导航地图开车载他同事经过一个停车场时突然想到:在线搜索也可以盈利。当时他认为,谷歌能…