MATLAB向量化函数 举例,MatLab-向量化技巧

《MatLab-向量化技巧》由会员分享,可在线阅读,更多相关《MatLab-向量化技巧(10页珍藏版)》请在人人文库网上搜索。

1、MatLab 向量化技巧家家 2007-05-17 13:53大家都知道MatLab是一种解释性语言,它的长处在矩阵运算。因此需要将问题尽量用矩阵表示,并且要避免对单个矩阵元素操作,而用整体矩阵运算。一个重要过程就是所谓将问题矢量化(vectorizing)。一个问题是如果需要对矩阵的不同元素作不同操作,那么怎么办?举个例子对矩阵X,作A=5*sin(X)/X,显然当X某元素-0时,A对应元素-5。按照通常在其他语言思路编程为:Nx=2000;X=2.0*pi*(rand(Nx,Nx)-0.5);X(1:Nx/2,:)=0.0;%生成NxXNx矩阵X,一半为随机分布,一半为0。A=zeros(。

2、Nx,Nx);form=1:Nxforn=1:Nxif(abs(X(m,n)=eps)A(m,n)=5.0.*sin(X(m,n)./X(m,n);elseA(m,n)=5.0;endendend%(ProgramNo.1)以上代码通过循环语句对每一个矩阵元素进行单独操作,这段代码在MatLab里效率特别低。为避免循环,考虑如下方法:方法I:用所谓logicalsubscripting。Nx=2000;X=2.0*pi*(rand(Nx,Nx)-0.5);X(1:Nx/2,:)=0.0;A=zeros(Nx,Nx);I=(abs(X)=eps);A=I.*5.0.*sin(X)./(X+(1-。

3、I)+(1-I).*5.0;%(ProgramNo.2)或者上面最后一行用如下代码代替:A(I)=5.0.*sin(X(I)./X(I);A(I)=5.0;%(ProgramNo.3)一个看起来更有效的办法是先生成一个所有元素都是5的A矩阵。代码如下:Nx=2000;X=2.0*pi*(rand(Nx,Nx)-0.5);X(1:Nx/2,:)=0.0;A=5.0;A=A(ones(Nx,Nx);%用Tonystrick生成矩阵A,所有元素=5I=(abs(X)=eps);A(I)=5.0.*sin(X(I)./X(I);%(ProgramNo.4)方法II:用find函数。Nx=2000;X=。

4、2.0*pi*(rand(Nx,Nx)-0.5);X(1:Nx/2,:)=0.0;A=5.0;A=A(ones(Nx,Nx);I=find(abs(X)=eps);A(I)=5.0.*sin(X(I)./X(I);%(ProgramNo.5)我在P41.6G,512MDDR266上作了个测试,每个程序执行5遍,选最小执行时间:ProgramNo.time(s)171.2023.3132.6442.8053.22显然ProgramNo.3是最快的。如果X矩阵中0元素很少,那么ProgramNo.2、ProgramNo.3以及ProgramNo.4的执行时间会非常接近。大家可以用profiler分。

5、析每一个语句所用时间情况。以上是我用过的两种方法,有没有更有效的方法呢?还有个问题就是,如何将主对角元素的Index加入到变量I中?例如需要将满足abs(X)1)if (mod(n,2)=1)n=n*3+1;elseif(mod(n,2)=0)n=n/2;else break;endendf=n;验证1:, 以前我们可能这样做:代码:a=zeros(1,);for k=1:a(k)=jiaogu(k);endall(a)现在我们只需这样:代码:all(arrayfun(jiaogu,1:)举这两个例子目的是为了让大家知道很多以前不能优化的程序利用这个函数还可以进一步优化。具体了解请doc ar。

6、rayfun 。另外cellfun和structfun也提供了类似的功能,关于其用法,帮助文档里写的很详细。向量化操作的又一重要函数accumarray的用法总结向量化编程是MATLAB编程区别于其他语言的最重要特征之一,MATLAB不断增强其向量化编程的能力。版本7以后出现的accumarray函数就是一个很好的例子。accumarray函数最早出现于7.0版(R14),在随后的7.1 (R14SP3), 7.2 (R2006a)版里又对其功能进行增强。大家可以在帮助文档里了解其基本信息,这里结合自己的使用经验给出其用法的举例,大家可以看看其效果。例1:生成一个*1的向量,其元素服从1,之间。

7、离散均匀分布,找出都有哪些元素出现了a=unidrnd(,1);方法1:tic;b=union(a,a);toc;Elapsed time is 0. seconds.方法2:tic;c=unique(a);toc;Elapsed time is 0. seconds.方法3tic,d=accumarray(a,1,1);e=find(d);tocElapsed time is 0. seconds.d 给出了每个元素出现的个数,如果还需要这方面的信息,无疑方法3占绝对优势。例2:在1000*1000的正方形区域内随机生成个点(坐标值是整数),统计每个坐标点上生成的点的个数。在这个例子下,像例。

8、1一样简单应用union和unique就不行了。通常我们考虑用循环:p=unidrnd(1000,2);tic;A=zeros(1000);for k=1:A(p(k,1),p(k,2)=A(p(k,1),p(k,2)+1;endtocElapsed time is 0. seconds.而用accumarray,可以这样: tic;a=accumarray(p,1,1000,1000);tocElapsed time is 0. seconds. isequal(A,a)ans =1速度整整提高了10倍。例3:1000人,身高分布在170-180,体重在110-200斤,年龄分布在20-50。

9、岁,计算身高体重都相等的人的年龄平均值。结果用矩阵表示:行数表示身高,列数表示体重,元素表示年龄的平均值。首先生成数据:rand(state,0)height=unidrnd(10,1000,1)+170;rand(state,0)weight=unidrnd(90,1000,1)+110;rand(state,0)old=unidrnd(30,1000,1)+20;利用accumarray计算的语句如下:tic;mo=accumarray(height,weight,old,mean);tocElapsed time is 0. seconds.这个矩阵比较稀疏也可以结果用稀疏矩阵来表示tic;mo=accumarray(height,weight,old,mean,0,true);tocElapsed time is 0. seconds.维数大后,稀疏矩阵会有优势,这个例子还不明显。大家有兴趣可以试试传统方法效果。以上仅举了三个例子,实际上,accumaary的应用方法非常灵活,尤其是对于很多要操作大矩阵的情况下。大家可以仔细看看帮助文档。

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

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

相关文章

IT人的八大修炼神器

看到2018年的KPI,你是否感到崩溃?在这个充满竞争的时代,你需要用最有效的方式,学习最有用的知识,来提高自身技能。小编特意为大家准备IT人的八大修炼神器,推荐能帮助我们提升技术的公众号,欢迎大…

hotelling t2 matlab,pca主成份分析方法

1.应用pca的前提应用pca的前提是,连续信号具有相关性。相关性是什么,是冗余。就是要利用pca去除冗余。2.pca的定义pca是一种去除随机变量间相关性的线性变换。是一种常用的多元数据分析方法。pca将互相关的输入数据转换成统计上不相干的主成分(或者特征)…

如何在 WebAPI 中启用 CORS

浏览器安全策略上的安全限制可以有效的阻止 Ajax 向另外一个域server发起请求,这就是著名的 同源策略,那如何突破这种限制呢?可以使用 CORS (Cross-Origin Resource Sharing) 跨域资源共享来解决此类问题,它…

Kappa信息化谋局电子商务与传统渠道的全面管理

近日,Kappa中国总经理任轶先生与淘宝网首席财务官兼淘宝商城负责人张勇先生会晤于杭州淘宝总部,就淘宝网与Kappa的电子商务战略合作达成全面共识。非常注重企业信息化建设的Kappa在积极推进电子商务的同时,也早早的把电子商务模式下的信息化建…

druid字段级_Druid的数据结构

Druid的数据结构Druid数据存储结构可以分为三层: 1. DataSource 2. Chunk 3. SegmentDataSource相当于传统数据库的按时间分区的表,Chunk相当于MySQL中的按时间分区的表一个分区,但是Chunk不是一个实体,只是一个虚拟的概念&#x…

数据分析师+做过名企项目+懂运营+985毕业=跳槽失败?

数据已经成为很多企业的重要资源,数据分析已经成为了各行业的指导军事,但是数据分析师的工作从来都不是容易的。如今,数据分析师是一个互联网从业人士转型最快捷的入门职位,人工智能、大数据都要依附于数据分析。很多人也因为前途…

matlab 如何画二维图形,Matlab 学习 画图篇 一 二维图形

matlab给绘制二维图形提供了很多的函数,把一些绘制二维图形的基本函数做成一张表,如下图所示:我就按照表的顺序一一记录一些个函数的简略用法。首先是1.plot函数plot函数有很多重载方法,这里只做简单的介绍1.1 plot(Y)1.1 若Y是向…

Newbe.Claptrap 框架入门,第二步 —— 创建项目

接上一篇 《Newbe.Claptrap 框架入门,第一步 —— 开发环境准备》,我们继续了解如何创建一个 Newbe.Claptrap 项目。安装项目模板 打开控制台运行以下命令来安装最新的项目模板:dotnet new --install Newbe.Claptrap.Template安装完毕后&…

TTL expired in transit--问题篇~

今天在做东航事件处理时&#xff0c;发现远程登陆DMS服务器后&#xff0c;ping所有三层交换机<cisco 3550> 都发现一个现象:TTL expired in transit&#xff1b;如图1所示:之后用tracert -d IP 后&#xff0c;如图2所示:如图可见&#xff0c;可以清楚的发现&#xff0c…

生成drl文件_我如何通过编程方式生成.drl文件。任何示例对我都将有所帮助

我搜索了很多站点&#xff0c;但找不到有关.drl文件生成的任何特定相关示例。 .drl文件生成方面的文档也不值得。解决方案//- ---- package部分-------PackageDescr pkg new PackageDescr();pkg.setName(" com.demo.model");// -------此处的导入部分-------ImportD…

【干货】机器学习中样本比例不平衡的处理方法

推荐阅读时间&#xff1a;5min~12min主要内容&#xff1a;机器学习中样本比例不平衡的处理方法在机器学习中&#xff0c;常常会遇到样本比例不平衡的问题&#xff0c;如对于一个二分类问题&#xff0c;正负样本的比例是 10:1。这种现象往往是由于本身数据来源决定的&#xff0c…

Newbe.Claptrap 框架入门,第一步 —— 开发环境准备

Newbe.Claptrap 框架依托于一些关键性的基础组件和一些可选的辅助组件。本篇我们来介绍一下如何准备一个开发环境。必要组件 这些组件是使用本框架进行开发是必须要安装的组件。Docker DesktopDocker Desktop 是以下所有组件运行的基础。开发可以通过以下链接下载对应操作系统的…

php sequelize,node,express_sequelize 联合查询,node,express,mysql,sequelize - phpStudy

sequelize 联合查询我用sequelize 联合查询db.user.hasMany(db.bbsuser,{foreignKey:userId});db.bbsuser.belongsTo(db.user);db.user.findAll({include:[db.bbsuser]})&#xff1b;得到结果格式以下&#xff1a;{"id": 9,"username": "CallMeSoul&q…

vs中断点不能设置

确保你的exe和pdb文件是从当前源代码里编译出来的。或者在 Tool -> options -> debug. 从中找到并取消掉“源代码必须和调试文件的版本一致”。 转载于:https://blog.51cto.com/ustcer/265179

android 弹窗有边框_Android 多种简单的弹出框样式设置代码

简介这是一个基于AlertDialog和Dialog这两个类封装的多种弹出框样式&#xff0c;其中提供各种简单样式的弹出框使用说明。同时也可自定义弹出框。特性1.使用链式开发代码简洁明了2.所有的弹出框样式都在DialogUIUtils这个类中完成&#xff0c;方便查阅方法3.可以自定义弹出框字…

网易10万+课程迅速刷屏又迅速被封:“违规”背后的思考

从16号晚上8点前后上线到17号早上&#xff0c;不到16小时&#xff0c;网易云课堂的“年度运营大课”&#xff0c;已售出超10万份&#xff08;售价39元&#xff09;&#xff0c;可以说是非常现象级了。而取得如此现象级成果的背后&#xff0c;至少一个核心驱动力源自于一个“一级…

一起学习设计模式--03.工厂方法模式

简单工厂模式虽然简单&#xff0c;但是存在一个很严重的问题&#xff1a;由于静态工厂方法是根据传入的参数不同来创建不同的产品的&#xff0c;所以当系统中需要引入新产品时&#xff0c;就需要修改工厂类的源代码&#xff0c;这将违背开闭原则。为了实现增加新产品而不修改原…

php restful规范,RESTFul API规范 详细指南

RESTFul规范RESTFul是一种HTTP API接口规范&#xff0c;只要满足的RESTFul规范&#xff0c;即可称为RESTFul API。既然是接口&#xff0c;我们先来了解一下&#xff0c;他和传统的API接口有何不同吧。本文以尽量简单明了的文字来介绍、描述&#xff0c;只讲核心内容&#xff0c…

求对一组数据进行排名的算法

为什么80%的码农都做不了架构师&#xff1f;>>> 我现在有一组数据&#xff0c;比如&#xff1a;25&#xff0c;19&#xff0c;29&#xff0c;3 怎么用java获得这组数据的排名&#xff0c;获得排名的结果应该是3&#xff0c;2&#xff0c;4&#xff0c;1 如果有相等…

移动端h5唤起键盘_移动端H5界面打开后,如何自动调用软键盘

test(){// let aa this.$refs.input1.blur();// this.$nextTick((x)>{ //正确写法// // this.$refs.inputs.focus();// // console.log(x)// // this.$refs.inp[0].$refs.input.focus();// },3000)// $api.dom(input).focus();// this.$refs.Inp.focus();// aa.focus();// …