- 主题:[讨论]为啥去部分元素反而花费时间更长呢?
凡是循环语句,基本上都可以优化为向量运算,速度提高10倍以上。
当然,程序员的水平是不一样的。
【 在 dlmaple (ph) 的大作中提到: 】
: 下面是高斯消去法的一段代码,我觉得方法2可以减少部分运算,结果花费的时间比方法1还长一点点(生成1000节的方阵,然后测试a=rand(1000);
: tic;guass(a);toc
: 注释掉方法2,取消注释方法1,然后再测试)每一次都是方法1时间短一点,而不是想象中的方法1耗费时间是方法2的二倍。
: ...................
--
FROM 112.47.159.*
你不都有for循环吗?
想法干掉它们。
【 在 dlmaple (ph) 的大作中提到: 】
: 你看我的帖子了吗?两个都是向量运算啊。当然,我知道有内置函数。
: 凡是循环语句,基本上都可以优化为向量运算,速度提高10倍以上。
: 当然,程序员的水平是不一样的。
: ...................
--
FROM 112.47.159.*
没有去除不了的for循环。
arrayfun等速度完全不一样。
【 在 dlmaple (ph) 的大作中提到: 】
: 谢谢,这里是个三重for循环,我把它变成了两重for(确实还可以再去掉一重,变成一个for循环,但不太可能完全去掉循环。)
: 我现在的疑问是为什么 a(:,n)=a(:,n)-a(m,n)/a(n,n)*a(:,m);
: 比 a(m:end,n)=a(m:end,n)-a(m,n)/a(n,n)*a(m:end,m)
: ...................
--
FROM 112.47.159.*
一个个地修改向量中的元素,比起向量计算慢,这是已知的。
显然前者仅仅是后者的一部分。
但是计算次数不一样了。
【 在 dlmaple (ph) 的大作中提到: 】
: 谢谢讨论。
: 我说两个事情:
: 1、你没仔细看我关注的点在哪儿。 我要修改 a(:,n)的元素,但因为前面部分没发生变化,所以我为了提高效率,只修改了a(m:end,n)这部分元素,但比修改 a(:,n)的所有元素还慢;
: ...................
--
修改:zszqzzzf FROM 112.47.159.*
FROM 112.47.159.*
你这是伪代码,跑不起来。
【 在 templarsf (sf) 的大作中提到: 】
: a=0;
: fun_handle=[fun_a,fun_b.....fun_z];
: for i=1:100
: ...................
--
FROM 112.47.159.*
优化是一门资深的技术活。
只为实际需要服务。
不是什么都能干的。
【 在 templarsf (sf) 的大作中提到: 】
: 大致意思就是每次执行的代码在这轮循环之前都不知道.
--
FROM 112.47.159.*