[討論] 邏輯矩陣的運算速度已回收

看板MATLAB作者 (鈴弓)時間14年前 (2011/10/20 11:48), 編輯推噓3(304)
留言7則, 3人參與, 最新討論串1/1
想要請問一下,使用邏輯矩陣來作運算的速度。 我個人的使用經驗是發現,當維度小於3的時候,速度相當的快; 但是如果維度增加的話,速度會非常非常的慢!? 會是因為我code撰寫錯誤 (沒有事先配置好矩陣空間?) 還是說邏輯矩陣的運算在高維度的時候真的就是比較慢的呢? 以下附上我的code: 測試過快的code,使用的是CTable_k = zeros(2,2,31,30); 測試過慢的code,是用的是b_CTable_k = zeros(2,2,31,30,200); Pfitem30跟Pritem30都是 <50x31 double> 的矩陣 boots_Pfitem30跟boots_Pritem30都是 <50x31x200 double> 的矩陣 兩者時間差超過90倍...... 快的code: item=30; CTable_k = zeros(2,2,item+1,item); %建立2x2列連表 for j = 1:item; for k = 0:item; a=(Pfitem30(:,item+1)==k); %建立邏輯矩陣 b=find(a); %對邏輯矩陣進行搜找的動作 c=(Pfitem30(b,j)==1); %Pfitem30(b,j)表示第j題 d=find(c); CTable_k(1,1,k+1,j)=length(d); CTable_k(1,2,k+1,j)=length(b)-length(d); A=(Pritem30(:,item+1)==k); %建立邏輯矩陣 B=find(A); %對邏輯矩陣進行搜找的動作 C=(Pritem30(B,j)==1); %Pritem30(b,j)表示第j題 D=find(C); CTable_k(2,1,k+1,j)=length(D); CTable_k(2,2,k+1,j)=length(B)-length(D); clear a b c d A B C D; end end 慢的code: item=30; iter_boot=200; b_CTable_k = zeros(2,2,item+1,item,iter_boot); %建立2x2列連表 for n = 1:iter_boot; for j = 1:item; for k = 0:item; a=(boots_Pfitem30(:,item+1,n)==k); %建立邏輯矩陣 b=find(a); %對邏輯矩陣進行搜找的動作 c=(boots_Pfitem30(b,j,n)==1); %boots_Pfitem30(b,j,n)表示第j題 d=find(c); b_CTable_k(1,1,k+1,j,n)=length(d); b_CTable_k(1,2,k+1,j,n)=length(b)-length(d); A=(boots_Pritem30(:,item+1,n)==k); %建立邏輯矩陣 B=find(A); %對邏輯矩陣進行搜找的動作 C=(boots_Pritem30(B,j,n)==1); %boots_Pritem30(B,j,n)表示第j題 D=find(C); b_CTable_k(2,1,k+1,j,n)=length(D); b_CTable_k(2,2,k+1,j,n)=length(B)-length(D); clear a b c d A B C D; end end end -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.123.213.195 ※ 編輯: susuyumi 來自: 140.123.213.195 (10/20 14:45)

10/20 15:11, , 1F
順便問迴圈要快的話,我記得是"越外面的迴圈越小"就越快?
10/20 15:11, 1F

10/20 18:38, , 2F
兩個版本for 跑得次數就不一樣了
10/20 18:38, 2F

10/21 18:55, , 3F
我知道不一樣,我是想問第二個的for迴圈有沒有辦法更快?
10/21 18:55, 3F

10/21 23:25, , 4F
就迴圈跑越多就越慢啊....和你說的矩陣大小的關係較小
10/21 23:25, 4F

10/22 20:56, , 5F
多層回圈寫法 盡量越外層執行次數叫少,這樣排法執行速
10/22 20:56, 5F

10/22 20:58, , 6F
越快,自己經歷模擬一個程式兩個回圈,一種約400次,另
10/22 20:58, 6F

10/22 21:01, , 7F
約8000次,依序上述規則做法比不用的求解時間差快20倍
10/22 21:01, 7F
文章代碼(AID): #1EdvdqGr (MATLAB)
文章代碼(AID): #1EdvdqGr (MATLAB)