声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1591|回复: 11

[编程技巧] 请教for循环的优化

[复制链接]
发表于 2009-8-13 14:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
用for循环赋值计算需要很长时间,如果能化成矩阵的话,运算就会快得多
3个for循环就已经很头痛了,现在碰到6个,有点懵了
请教大家,形如
         for x=0:a
             for y=0:b
                 for z=0:c
                     for x2=0:d
                         for y2=0:e
                             for z2=0:f
                                 I=f(x,y,z,x2,y2,z2);
                             end
                         end
                     end
                 end
             end
         end
的情况,该如何化简?
回复
分享到:

使用道具 举报

发表于 2009-8-13 20:39 | 显示全部楼层
I=f(x,y,z,x2,y2,z2);是什麽?
发表于 2009-8-14 09:07 | 显示全部楼层
楼主的程序过于飘忽,也不完整,完全不知所云。。。所以我能告诉你,matlab的优势在于矢量化,要大幅度提速就要尽量减少循环,把循环变成矩阵,矢量化的运行。

[ 本帖最后由 ChaChing 于 2009-8-15 00:11 编辑 ]
发表于 2009-8-16 20:33 | 显示全部楼层
尽量避免用for!!!!!
 楼主| 发表于 2009-8-24 20:18 | 显示全部楼层

回复 板凳 linus22 的帖子

我的意思是,如何把FOR循环去掉,直接用矩阵
三个FOR循环的时候,可以把X,Y,Z写成三个矩阵
六个的时候,X,Y,Z,X2,Y2,Z2的矩阵写法,我有点晕了
 楼主| 发表于 2009-8-24 20:19 | 显示全部楼层

回复 沙发 ChaChing 的帖子

具体函数形式无所谓
我只是想把循环去掉
发表于 2009-8-24 20:34 | 显示全部楼层

回复 6楼 sun1993 的帖子

照你说的,三个for循环是怎么处理的?
 楼主| 发表于 2009-8-24 20:53 | 显示全部楼层

回复 7楼 kakalx 的帖子

用了很笨的方法,就是把x,y,z按照取值顺序写成矩阵
  比如都取1到3,那么x=[1 1 1...;2 2 2...;3 3 3...];
                    y=[1 1 1 2 2 2 3 3 3;1 1 1 2 2 2 3 3 3;...];
                    Z=[1 2 3 1 2 3 1 2 3;1 2 3 1 2 3 1 2 3;...];
用一些重复行或列的命令写出来就行了。
   呵呵,我说了是很笨的方法了,别笑话我。:@L 碰到6个的,我绕糊涂了。:@Q
   有好方法的同学,能不能教教我
发表于 2009-8-24 21:49 | 显示全部楼层
说真的, 个人水平专业有限, 还是没清楚LZ的问题!
不懂为何"具体函数形式无所谓"?
发表于 2009-8-24 22:52 | 显示全部楼层

回复 6楼 sun1993 的帖子

有具体的函数,是可以根据函数修改参数的
 楼主| 发表于 2009-8-25 13:44 | 显示全部楼层

回复 9楼 ChaChing 的帖子

不好意思,不是您水平有限,是我没表述清楚
我自己再想想,想明白了再报告大家
发表于 2009-8-25 18:51 | 显示全部楼层

回复 楼主 sun1993 的帖子

f函数应该是你自己编写的吧?你只要修改你的程序,使它可以接受向量输入就可以把所有的循环都去掉了。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-27 23:28 , Processed in 0.058902 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表