- 主题:请问这个matlab程序为什么越来越慢?
你私我吧,告诉我意图,我不懂为啥要用一个大矩阵减一个小的
【 在 novicer 的大作中提到: 】
: 我已经不奢望去掉两个for循环了,只要程序不运行的越来越慢就可以,我不明白为什么这个程序运行越来越慢
:
--
FROM 223.72.74.*
matlab最不擅长的就是for循环语句。循环套循环,是慢上加慢。
你这个用fortran或c写,会快很多。
【 在 novicer 的大作中提到: 】
: u2 = exp(i.*zeros(8192,8192));
: for ite1 = 1:800
: for ite2 = 1:900
: ...................
--
FROM 117.136.45.*
我觉得for循环去不掉,你能去掉的话,我给你2万积分,给知天命版5000积分
有人告诉我把这个二维循环变成一维的,但这样还是要循环800×900次
【 在 soncyme 的大作中提到: 】
: 这玩意应该很好去掉的吧。。。
:
--
FROM 49.66.217.*
不明觉厉
【 在 soncyme (时间的力量) 的大作中提到: 】
: 你把那个xy_2d扩展成一样大的矩阵应该就可以了
--
FROM 117.119.67.*
看了下好像是这样的,给你做了个小实验
x=zeros(7,7)
y=randn(3,4)
for i=1:3
for j=1:4
x-y(i,j)
end
end
这是类似你的问题
newy=reshape(y,1,12);
for i=1:12
temp=repmat(newy(i),7,7);
x-temp
end
这是精简后的
你看看能不能省点时间
【 在 novicer 的大作中提到: 】
: 我觉得for循环去不掉,你能去掉的话,我给你2万积分,给知天命版5000积分
: 有人告诉我把这个二维循环变成一维的,但这样还是要循环800×900次
:
: ...................
--
修改:soncyme FROM 223.72.74.*
FROM 223.72.74.*
。。太厉害。。这就是程序么。。原以为一个程序会很复杂庞大。。
--
FROM 183.219.175.*
不会matlab,但感觉可以优化
【 在 novicer 的大作中提到: 】
: u2 = exp(i.*zeros(8192,8192));
: for ite1 = 1:800
: for ite2 = 1:900
: ...................
--
FROM 142.122.52.*
没有matlab,用octave跑了跑,每个内循环大概花4秒多,用时比较稳定,没有越来越慢:
xy_2d=randn(8192,8192);
z_2d=randn(800,900);
u2 = ones(8192, 8192);
l_c = cputime();
for ite1 = 1:800
for ite2 = 1:900
u = exp(i.*sqrt(xy_2d- z_2d(ite1,ite2)));
u2 = u2.*u;
c_c = cputime ();
printf("%f\n", c_c - l_c);
l_c = c_c;
end
end
$ octave a.m
octave: X11 DISPLAY environment variable not set
octave: disabling GUI features
4.765148
4.862631
4.779450
5.041904
4.884259
4.147731
4.518169
4.276477
3.707727
4.330566
4.823088
4.806313
4.823238
4.885304
4.861114
4.953960
3.853307
4.220949
4.907371
3.995417
4.943422
4.870499
3.797168
4.689785
4.807867
【 在 novicer 的大作中提到: 】
: u2 = exp(i.*zeros(8192,8192));
: for ite1 = 1:800
: for ite2 = 1:900
: ...................
--
FROM 173.38.117.*
非常感谢,不过你的电脑有点慢啊,我10年前买的电脑,内循环比这个实际上要复杂一点点,每个内循环0.15秒
【 在 jinbabawa 的大作中提到: 】
: 没有matlab,用octave跑了跑,每个内循环大概花4秒多,用时比较稳定,没有越来越慢:
: xy_2d=randn(8192,8192);
: z_2d=randn(800,900);
: ...................
--
FROM 114.223.208.*
我的机器不慢,是服务器,内存就376G,CPU肯定差不了,难道octave需要什么配置?
【 在 novicer 的大作中提到: 】
: 非常感谢,不过你的电脑有点慢啊,我10年前买的电脑,内循环比这个实际上要复杂一点点,每个内循环0.15秒
:
--
FROM 173.38.117.*