MATLAB优化——减少for的使用
Table of Contents
MATLAB
MATLAB作为一个强大的工具(可惜是收费的),在矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言等方面都有着卓越的表现。一方面友好的界面,直观的表示让很多用户为之倾倒,但另一方面又有很多人因为他的计算方式抱怨计算太慢,内存需求量大等。其实真的是MATLAB本身的局限么,或许是我们并没有真正懂得MATLAB吧。
MATLAB是matrix laboratory两个词的组合。换句话说,MATLAB是为矩阵而生的。而现实情况中(本人虽说MATLAB学习不久,但是已经阅读了很多前辈的代码),很多人并不是用矩阵的思想去思考MATLAB,而是用其他代码的思想。(这里又想起了网上一句话“一种语言即一种思考问题的方式”。)其中,最明显的就是循环的问题,比如for的使用。循环的思考方式比较直观,但是MATLAB并不擅长循环,虽然也能做,但是用矩阵的方式,MATLAB可以做到更好。
矩阵计算——全0行整体替换
这里举一个例子,用行向量v替换矩阵中的全0行。比如下面这个矩阵Data:
8 7 7 1
0 0 0 0
4 8 7 1
0 0 0 0
7 5 9 2
明显,第2行和第4行是全0的。如果把这两行用向量v=[1 2 3 4]替换掉,怎么做。你千万别跟我说用这个办法:
Data(2,:)=v
Data(4,:)=v
明显这是手动操作找出来的全0行,不适用于更复杂的数据。很多人(包括我看到的代码)都是如下操作
k=size(Data,1);
for j=1:k;
if Data(i,:)==0;
Data(i,:)=v;
end
end
这里举得例子其实就是遍历一遍,就是把矩阵每个元素(或者行,或者列)都检查一遍,符合条件的,做一下处理。本例中是把Data矩阵中的所有行都看了一遍,对全0的行进行了一下赋值操作。听到这,看客可能已经体会到,当你输入一个for以后,MATLAB有多辛苦了,他本不适应这样的生活啊。那么用矩阵的思路怎么做呢?
首先,找出全0行的操作为(Data==0),这样matlab会把Data中等于0的元素找出来,得到下面这个矩阵temp:
0 0 0 0
1 1 1 1
0 0 0 0
1 1 1 1
0 0 0 0
同时把v变成对角矩阵,diag(v)
可以试一试(Data==0)*diag(v)这样得到的矩阵如下:
0 0 0 0
1 2 3 4
0 0 0 0
1 2 3 4
0 0 0 0
这时得到的矩阵再加上原来的矩阵Data,实现了替代全0行的效果
(Data==0)*diag(v)+Data
8 7 7 1
1 2 3 4
4 8 7 1
1 2 3 4
7 5 9 2
对比一下命令
for结构:
k=size(Data,1);
for j=1:k;
if Data(i,:)==0;
Data(i,:)=v;
end
end
矩阵计算:
(Data==0)*diag(v)+Data
命令减少了,MATLAB也轻松了。
PS:不过上面的矩阵计算也有漏洞,比如如果Data中第一行有一个元素是0,怎么办?这里就留给大家自己思考了。
MATLAB优化——减少for的使用的更多相关文章
- Matlab优化存储器读写来改善程序性能
最近用Matlab写程序的时候终于遇到了程序执行效率的问题,于是在Google上面搜索了一篇提高代码性能的文章,简单的概括一下. 文章是通过优化寄存器读写来提高执行速度的,主要体现在三个方面: 在做循 ...
- 前端性能优化 —— 减少HTTP请求
简要:对于影响页面呈选 的因素有3个地方:服务器连接数据库并计算返回数据 , http请求以及数据(文件)经过网络传输 , 文件在浏览器中计算渲染呈选: 其中大约80%的时间都耗在了http请求上,所 ...
- 前端性能优化-减少http请求,dns预解析,减少repaint和reflow
前端性能优化方法: 一 . 减少http请求 (1)通过合并图片,减少请求,俗称css sprites(css精灵)css sprites (2)lazyload懒加载,在需要的时候再加载 1.定义: ...
- 页面优化——减少HTTP请求数
1.关于减少http请求数 关于减少http请求数,是前端开发性能优化的一个非常重要方面,所以在基本所有的优化原则里,都有这一条原则:减少http请求数. 先不考虑其他的,我们先考虑为什么减少http ...
- web性能优化--减少DOM操作(三)
减少DOM数量 减少DOM操作 批量处理DOM操作 批量处理样式修改 尽量不要使用tabel布局 尽量不要使用css表达式 string用数组join css选择符优化 1.减少DOM数量 在HTML ...
- web前端加载优化-减少HTTP请求 (细节与办法)
减少HTTP请求. 因为手机浏览器同时响应请求为4个请求(Android支持4个,iOS 5后可支持6个),所以要尽量减少页面的请求数,首次加载同时请求数不能超过4个.a) 合并CSS.JavaScr ...
- 网站优化--减少HTTP请求
发送HTTP请求需要经过几个过程 域名解析--TCP连接--发送请求--等待--下载资源--解析时间 这其中需要花费一定时间,因此,尽可能的需要减少网站的HTTP请求,方法有以下几种: 1 . css ...
- 前端性能优化---减少http请求数量和减少请求资源的大小
减少http请求数量:就是资源的合并 减少http请求大小:就是资源的压缩 一.资源合并的原理: 资源不合并的缺点: 1.文件和文件之间有插入请求----请求a.js,b.js,c.js(三行 ...
- web性能优化--减少客户端请求数(一)
多图标合并,用css分隔 设置较长时间的过期时间 合并多个css文件 合并多个js文件 根据域名划分内容 首先介绍一款速度测试工具:webpagetest(填上url,username,passwor ...
随机推荐
- bootstrap复选框和单选按钮
复选框和单选按钮标签包含在<Label>标签中<div class="checkbox"> <label><input type=&quo ...
- bzoj 3555: [Ctsc2014]企鹅QQ【hash+瞎搞】
首先注意 先hash一下,双hash,然后枚举删去位置,把hash值排个序,把些相等的加起来统计一下对数即可 #include<iostream> #include<cstdio&g ...
- 在JS/jQuery中,怎么触发input的keypress/keydown/keyup事件?
怎么触发keypress/keydown/keyup事件? 问题: 1.在之前的写的input后面添加了搜索按钮 2.input只有keyup事件,如下: $("#desktop_folde ...
- 【杂谈】RN的一点回顾与未来的展望
从开始到现在,笔者接触RN已经接近半年,适逢各种变化的发生,于是,简单的遐想了一下RN的未来. Airbnb在今年早些时候,宣布了放弃继续使用RN,并且发布了一篇“React Native at Ai ...
- mariadb+centos7+主从复制
MYSQL(mariadb) MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可.开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的 ...
- GUID的学习
GUID(全局统一标识符)是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的.通常平台会提供生成GUID的API.生成算法很有意思,用到了以太网卡地址.纳秒级时间.芯片ID码和许多可 ...
- 1-最全CSS3选择器
一,CSS3 选择器分类 二,选择器语法 1,基本选择器语法 选择器 类型 功能描述 * 通配选择器 选择文档中所以HTML元素 E 元素选择器 选择指定类型的HTML元素 #id ID选择器 ...
- 473 Matchsticks to Square 火柴拼正方形
还记得童话<卖火柴的小女孩>吗?现在,你知道小女孩有多少根火柴,请找出一种能使用所有火柴拼成一个正方形的方法.不能折断火柴,可以把火柴连接起来,并且每根火柴都要用到.输入为小女孩拥有火柴的 ...
- angular.module 参数的意思
定义一个module需要两个参数,第一个作为module的名字,第二个则是指出这个module都依赖哪些别的modules
- [转]Visual F# Samples and Walkthroughs
本文转自:http://msdn.microsoft.com/en-US/library/vstudio/ee241126.aspx This topic provides links to samp ...