[討論] 邏輯矩陣的運算速度已回收
想要請問一下,使用邏輯矩陣來作運算的速度。
我個人的使用經驗是發現,當維度小於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
10/20 18:38, 2F
→
10/21 18:55, , 3F
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
10/22 20:58, 6F
推
10/22 21:01, , 7F
10/22 21:01, 7F
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章