在Matlab里如何将简单的循环和分支语句变成纯向量运算
时间:2011-09-10
来源:互联网
原文:http://www.jiang925.com/content/convert-simple-iteration-and-branch-vector-operations-matlab-0 <---帮忙点广告啊,哈哈
此乃原创,转载注明出处。^
前几天帮学精算的朋友改代码。学精算不深究编程,但还离不开Matlab的数学计算。话说我看到向量计算眼前一亮,联想到之前研究的GPU编程,向量运算要是能分发到CUDA进行运算岂不是太高效了。有点儿跑题了。我是想说,向量运算可以充分利用多线程来加速运算。所以能用向量运算的东西一定不要用循环。不排除循环多线程的可能,不过我估计Matlab没有那么高级能自动优化循环。最多我估计也就做到loop unrolling。
简单的向量运算,懂点儿Matlab的应该都会。
比如说要把一个1xN的向量每一项都乘2。循环写成下面的形式:
for j = 1:N
v(j) = v(j) * 2;
end
而使用向量运算就看起来简洁多了,也肯定更高效:
v(:) = v(:) * 2;
其中的":"代替了下标,代表所有的项都进行这一行操作。
上面是简单的循环。再复杂一点,比如说循环嵌套分支怎么办呢?方法还是有的。主要利用matlab里面将true解释成1,把false解释成0的特性。
比如说下面这段代码:
for j = 1:N
if A<B
v(j) = C;
else
v(j) = D;
end
end
单纯地用向量运算修改不好使了。需要绕一点儿弯儿了:
v(:) = (A<B) * C + (1 - (A<B)) * D;
或者
v(:) = (A<B) * C + (A>=B) * D;
肯定还有更复杂的语句可以转换。等碰上了再回来加上。
此乃原创,转载注明出处。^
前几天帮学精算的朋友改代码。学精算不深究编程,但还离不开Matlab的数学计算。话说我看到向量计算眼前一亮,联想到之前研究的GPU编程,向量运算要是能分发到CUDA进行运算岂不是太高效了。有点儿跑题了。我是想说,向量运算可以充分利用多线程来加速运算。所以能用向量运算的东西一定不要用循环。不排除循环多线程的可能,不过我估计Matlab没有那么高级能自动优化循环。最多我估计也就做到loop unrolling。
简单的向量运算,懂点儿Matlab的应该都会。
比如说要把一个1xN的向量每一项都乘2。循环写成下面的形式:
for j = 1:N
v(j) = v(j) * 2;
end
而使用向量运算就看起来简洁多了,也肯定更高效:
v(:) = v(:) * 2;
其中的":"代替了下标,代表所有的项都进行这一行操作。
上面是简单的循环。再复杂一点,比如说循环嵌套分支怎么办呢?方法还是有的。主要利用matlab里面将true解释成1,把false解释成0的特性。
比如说下面这段代码:
for j = 1:N
if A<B
v(j) = C;
else
v(j) = D;
end
end
单纯地用向量运算修改不好使了。需要绕一点儿弯儿了:
v(:) = (A<B) * C + (1 - (A<B)) * D;
或者
v(:) = (A<B) * C + (A>=B) * D;
肯定还有更复杂的语句可以转换。等碰上了再回来加上。
作者: jiang925 发布时间: 2011-09-10
回复 jiang925
有前提条件的..就是循环里前后要没有联系才行。
有前提条件的..就是循环里前后要没有联系才行。
作者: zzjzzpgg12 发布时间: 2011-09-18
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28