decrease num of for loops
15 次查看(过去 30 天)
显示 更早的评论
Hi
Can you help me to write that 4 for loops with just 1 for loop?
I really need to speed up my program and that is the biggest problem.
for u=0:7,
for v=0:7,
tmp = 0;
for x=0:7,
for y=0:7,
tmp = tmp + vhod(y+1, x+1) * cosd( (2*x + 1)*u*180/16 ) * cosd( (2*y + 1)*v*180/16 );
end
end
izhod(v+1, u+1) = round(0.25 * C(u+1) * C(v+1) * tmp);
end
end
0 个评论
采纳的回答
Matt Fig
2012-11-3
编辑:Matt Fig
2012-11-3
This should be much faster:
D = (2*(0:7).'+1)*180/16; % No need to do this over and over.
for u=0:7
for v=0:7
tmp = vhod.*(cosd(D*v) * cosd(D.'*u));
izhod2(v+1, u+1) = C(u+1) * C(v+1) * sum(tmp(:));
end
end
izhod2 = round(0.25 *izhod2); %compare to izhod... equal!
更多回答(1 个)
José-Luis
2012-11-3
old_v = 0;
for ii = 1:8*8*8*8
[u v x y] = ind2sub([8 8 8 8],ii);
u = u-1; v = v-1; x = x-1; y = y-1;
if old_v ~= v
tmp = 0;
end
%do your stuff
old_v = v;
end
1 个评论
Matt Fig
2012-11-3
Uros comments:
"hm i can't really understand how it works
now i have:
tmp = 0;
old_v = 0;
for ii = 1:8*8*8*8
[u v x y] = ind2sub([8 8 8 8],ii);
u = u-1; v = v-1; x = x-1; y = y-1;
if old_v ~= v
tmp = 0;
end
tmp = tmp + vhod(y+1, x+1) * cosd( (2*x + 1)*u*180/16 ) * cosd( (2*y + 1)*v*180/16 );
old_v = v;
end
but i don't know where and how to put that line:
izhod(v+1, u+1) = round(0.25 * C(u+1) * C(v+1) * tmp);"
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!