ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:38.51KB ,
资源ID:10601677      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10601677.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(译MATLAB代码矢量化指南.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

译MATLAB代码矢量化指南.docx

1、译MATLAB代码矢量化指南(译)MATLAB代码矢量化指南这个建议学matlab的都看看,并且要反复的看标 题: (译)MATLAB代码矢量化指南 发信站: BBS 水木清华站 (Tue Nov 12 00:43:16 2002), 站内 本文节译自 1100/1109.shtml Revison: 2.0 Last Date Modified: 15-October-2002 翻译:coolorsmth 感谢:smth2008smth提供他的译稿。本文多处参考或引用他的译文 =一、基本技术 -1)MATLAB索引或引用(MATLAB Indexing or Referencing) 在MA

2、TLAB中有三种基本方法可以选取一个矩阵的子阵。它们分别是下标法,线性法和逻辑法(subscripted, linear, and logical)。 如果你已经熟悉这个内容,请跳过本节 1.1)下标法 非常简单,看几个例子就好。 A = 6:12; 终止下标起始下标A(3,5) ans = 8 10 步长A(3:2:end) ans = 8 10 12 A = 11 14 17; . 12 15 18; . 13 16 19; A(2:3,2) ans = 15 16 B=A(2,3)B=181.2)线性法 二维矩阵以列优先顺序可以线性展开,可以通过现行展开后的元素序号来访问元素。 A =

3、11 14 17; . 12 15 18; . 13 16 19; A(6) ans = 16 A(3,1,8) ans = 13 11 18 A(3;1;8) ans = 13 11 18 C=A(2,3)C=12 131.3)逻辑法 用一个和原矩阵具有相同尺寸的0-1矩阵,可以索引元素。在某个位置上为1表示选取元素,否则不选。得到的结果是一个向量。 A = 6:10; A(logical(0 0 1 0 1) ans = 8 10 A = 1 2 3 4; B = 1 0 0 1; A(logical(B) ans = 1 4 - 2)数组操作和矩阵操作(Array Operations

4、vs. Matrix Operations) 对矩阵的元素一个一个孤立进行的操作称作数组操作;而把矩阵视为一个整体进行的运算则成为矩阵操作。MATLAB运算符*,/,都是矩阵运算,而相应的数组操作则是.*, ./, ., . A=1 0 ;0 1; B=0 1 ;1 0; A*B % 矩阵乘法 ans = 0 1 1 0 A.*B % A和B对应项相乘 ans = 0 0 0 0 - 3)布朗数组操作(Boolean Array Operations) 对矩阵的比较运算是数组操作,也就是说,是对每个元素孤立进行的。因此其结果就不是一个“真”或者“假”,而是一堆“真假”。这个结果就是布朗数组。

5、D = -0.2 1.0 1.5 3.0 -1.0 4.2 3.14; D = 0 ans = 0 1 1 1 0 1 1 如果想选出D中的正元素: D = D(D0) D = 1.0000 1.5000 3.0000 4.2000 3.1400 除此之外,MATLAB运算中会出现NaN,Inf,-Inf。对它们的比较参见下例:Inf=Inf返回真 Inf 用于计算数组的双重for循环。 使用的工具:数组乘法 优化前: A = magic(100); B = pascal(100); for j = 1:100 for k = 1:100; X(j,k) = sqrt(A(j,k) * (B(

6、j,k) - 1); end end 优化后: A = magic(100); B = pascal(100); X = sqrt(A).*(B-1); 用一个循环建立一个向量,其元素依赖于前一个元素 使用的工具:FILTER, CUMSUM, CUMPROD 优化前: A = 1; L = 1000; for i = 1:L A(i+1) = 2*A(i)+1; end 优化后: L = 1000; A = filter(1,1 -2,ones(1,L+1); 如果你的向量构造只使用加法或乘法,你可使用cumsum或cumprod函数。 优化前: n=10000; V_B=100*ones(

7、1,n); V_B2=100*ones(1,n); ScaleFactor=rand(1,n-1); for i = 2:n V_B(i) = V_B(i-1)*(1+ScaleFactor(i-1); end for i=2:n V_B2(i) = V_B2(i-1)+3; end 优化后: n=10000; V_A=100*ones(1,n); V_A2 = 100*ones(1,n); ScaleFactor=rand(1,n-1); V_A=cumprod(100 1+ScaleFactor); V_A2=cumsum(100 3*ones(1,n-1); 向量累加,每5个元素进行一次

8、: 工具:CUMSUM , 向量索引 优化前: % Use an arbitrary vector, x x = 1:10000; y = ; for n = 5:5:length(x) y = y sum(x(1:n); end 优化后(使用预分配): x = 1:10000; ylength = (length(x) - mod(length(x),5)/5; % Avoid using ZEROS command during preallocation y(1:ylength) = 0; for n = 5:5:length(x) y(n/5) = sum(x(1:n); end 优化

9、后(使用矢量化,不再需要预分配): x = 1:10000; cums = cumsum(x); y = cums(5:5:length(x); 操作一个向量,当某个元素的后继元素为0时,重复这个元素: 工具:FIND, CUMSUM, DIFF 任务:我们要操作一个由非零数值和零组成的向量,要求把零替换成为 它前面的非零数值。例如,我们要转换下面的向量: a=2; b=3; c=5; d=15; e=11; x = a 0 0 0 b 0 0 c 0 0 0 0 d 0 e 0 0 0 0 0; 为: x = a a a a b b b c c c c c d d e e e e e e; 解(diff和cumsum是反函数): valind = find(x); x(valind(2:end) = diff(x(valind); x = cumsum(x); 将向量的元素累加到特定位置上 工具:SPARSE 优化前: % The values we are summing at designated indices values = 20 15 45 50 75 10 15 15 35 40 10; % The indices associated with the values are summed cumulatively indices = 2 4 4 1 3 4

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1