Re: [問題] 將迴圈改成矩陣化運算後 速度不可思議 …已回收
[恕刪]
→
09/10 22:39,
09/10 22:39
※ 編輯: iblind 來自: 218.34.35.136 (09/10 22:59)
→
09/10 23:01,
09/10 23:01
→
09/11 04:38,
09/11 04:38
我也是算到陣列運算"平均時間"比迴圏快。
但有幾次迴圏比較快。
我覺得只光看幾次算出來的時間然後判定誰快誰慢很不準。
有時電腦在忙碌,短時間的計算就會被影響很大。
所以我認為比較準確的測量計算時間的方法是:
把要測時間的程式碼部分加上迴圈多跑幾次。
例如這是我用迴圈多跑幾次的結果:
~~~~~~~~~~~~~~~~~~Version 1~~~~~~~~~~~~
tic
for m = 1:20
A=w*Y;
end
toc
Elapsed time is 15.352618 seconds.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~Version 2~~~~~~~~~~~~
tic
for m = 1:20
for i=1:BLK
A(:,(i-1)*P+1:i*P)=w*Y(:,(i-1)*P+1:i*P);
end
end
Elapsed time is 21.496494 seconds.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
照理來講某程式碼跑愈多次,時間的overhead會由它主導,
也就是受到電腦其它程式忙碌的影響會愈小。
但要跑幾次比較好?總不能跑無限多次。
你可以想想,你可以忍受測多久的時間?1分鐘?1小時?1個月?...
或者迴圈m的數字代不同的值去測時間可以畫出趨勢圖。
例如:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
clc;
clear;
%參數設定及預先開出存放適當大小記憶體的變數(始)
trial=1001;
K=8;
N=1024;
P=N/K;
BLK=150;
w=zeros(trial,K);
Y=zeros(K,P*BLK);
A=zeros(trial,P*BLK);
%參數設定及預先開出存放適當大小記憶體的變數(末)
%隨機產生2個要運算的矩陣(始)
w=rand(trial,K);
for i=1:BLK
Y(:,(i-1)*P+1:i*P) =rand(K,P);
end
%隨機產生2個要運算的矩陣(末)
%矩陣化 (始)
for n = 1:10
tic;
for m = 1:n
A=w*Y;
end
time1(n) = toc;
end
%矩陣化 (末)
%迴圈法 (始)
for n = 1:10
tic;
for m = 1:n
for i=1:BLK
A(:,(i-1)*P+1:i*P)=w*Y(:,(i-1)*P+1:i*P);
end
end
time2(n) = toc;
end
%迴圈法 (末)
plot(time1, 'r');
hold on;
plot(time2, 'b');
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Screen shot:
http://zxvc.pixnet.net/album/photo/100667972
--
西方三聖:http://p8.p.pixnet.net/albums/userpics/8/3/553683/1193661731.jpg
《佛說阿彌陀經》http://web.cc.ncu.edu.tw/~93501025/amtf.doc
十一面觀音咒:http://file.buda.idv.tw/music/DBZFY04.mp3
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.220.219
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章