decrease num of for loops
14 ビュー (過去 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!
5 件のコメント
その他の回答 (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!