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,怎么办?这里就留给大家自己思考了。
最新文章
- Cordova应用程序修改启动画面或者Icon
- [备忘]检索 COM 类工厂中 CLSID 为 {91493441-5A91-11CF-8700-00AA0060263B} 的组件时失败解决方法
- Maven项目导入后打红色X
- Linux操作系统基础(完结)
- svn版本控制器在vs2013中的使用
- 【高斯消元】Poj 1222:EXTENDED LIGHTS OUT
- java_泛型(2016-11-17)
- 通过并行 提高批量审核PDF性能
- [LA] 3644 - X-Plosives [并查集]
- WCF技术剖析之八:ClientBase<;T>;中对ChannelFactory<;T>;的缓存机制
- 《C++反汇编与逆向分析技术揭秘》——基本数据类型的表现形式
- JVM基础系列开篇:为什么要学虚拟机?
- angularjs简单介绍和特点
- HTML和CSS怎么用
- wakatime记录 coding时间的工具
- 【XSY2032】简单粗暴的题目 组合数
- jenkins卡在等待界面解决方法
- DbSet<;T>;().Where(e =>; true)之后再想Include怎么办?
- PTA 复数四则运算
- MQTT 学习记录
热门文章
- markdown(语法)入门学习:
- bzoj 3598: [Scoi2014]方伯伯的商场之旅【数位dp】
- bzoj 4540: [Hnoi2016]序列【单调栈+线段树】
- Win7下安装MongoDB4.0.10
- LeetCode.893-特殊相等字符串组(Groups of Special-Equivalent Strings)
- 图论算法->;最短路
- border-radius的参数
- 【OCR技术系列一】光学字符识别技术介绍
- 给ambari集群里的kafka安装基于web的kafka管理工具Kafka-manager(图文详解)
- Elasticsearch--集群&;时光之门和恢复控制