[討論] 兩種寫法的時間差異已回收

看板MATLAB作者 (CCT)時間15年前 (2011/03/09 22:10), 編輯推噓2(209)
留言11則, 4人參與, 最新討論串1/1
我們今天LAB要模擬出二維高斯 這是今天上課TA提供我們的寫法 兩個for -- clc; clear all; n = 2; m = [0;0]; C = [1 1/3;1/3 1]; xx = -5:0.08:5; xy = -5:0.08:5; for x1 = 1:length(xx) for x2 =1:length(xy) f_x(x1,x2) = exp( (-( [ xx(x1);xy(x2)]-m).'... *inv(C)*([xx(x1);xy(x2)]-m) )/2)... /( (2*pi)^(n/2) * (det(C))^(1/2) ); end end figure(1) mesh(xx,xy,f_x) -- 然後這是我回來後 嘗試用meshgrid寫的 一個for -- clc; clear all; x = -5:0.08:5; y = -5:0.08:5; m = [0;0]; n = 2; C = [1 1/3;1/3 1]; [xx yy] = meshgrid(x,y); [row col] =size(xx); xxx = reshape(xx,1,row * col); yyy = reshape(yy,1,row * col); X = [xxx;yyy]; for i = 1:row*col f_x(i) = exp( (-( X(:,i)-m )'*inv(C) * ( X(:,i)-m ))/2)... /( (2*pi)^(n/2) * (det(C))^(1/2) ); end f_xx = reshape(f_x,row,col); figure(2) mesh(xx,yy,f_xx); -- 原本我以為少一個for 跑的時間會少 可是測試的結果不是Q_Q 我想請教版上高手兩個問題 1.為什麼跑的時間跟我想的不一樣(少一個for會減少時間)?? 2.對於我自己修改的code 可以怎麼修讓他更快呢?? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.113.68.202 ※ 編輯: CCT63 來自: 140.113.68.202 (03/09 22:10)

03/09 23:01, , 1F
雖然你少一層迴圈 但兩個總計算次數是一樣的
03/09 23:01, 1F

03/09 23:02, , 2F
而你迴圈內算式的計算時間又比TA的長
03/09 23:02, 2F

03/09 23:06, , 3F
要加快你得把迴圈全改成矩陣
03/09 23:06, 3F

03/10 00:35, , 4F
其實你已經幾乎快改完了,把迴圈拔掉,X(:,i)改X就行了
03/10 00:35, 4F

03/13 16:42, , 5F
我用樓上的辦法改完後 一直叫我help memory = =
03/13 16:42, 5F

03/13 16:42, , 6F
我用我的方法多加這行 f_x = zeros(1,row*col);
03/13 16:42, 6F

03/13 16:43, , 7F
變成只需要跑0.480530sec ^^
03/13 16:43, 7F

03/13 16:43, , 8F
這是現在我能想到最有效率的辦法了XD
03/13 16:43, 8F

03/14 20:27, , 9F
好神奇!預先配空間就可提高效能 但S大的方法我還是不會
03/14 20:27, 9F

03/14 20:27, , 10F
寫 可以教學一下嗎
03/14 20:27, 10F

03/17 22:16, , 11F
我猜是因為預先配空間 接下來只要改值 不需要重新改大小
03/17 22:16, 11F
文章代碼(AID): #1DTuev5W (MATLAB)