Re: [問題] 如何設定批次迴圈的次數已回收
不好意思,再次丟出一個問題來詢問。
我有一筆數列 s <10000x30 double>,我希望將二維矩陣 s 轉變成三維矩陣 ss:
%====這個是資料示意====%
ss(:,:,1) = s(1:50,:);
ss(:,:,2) = s(51:100,:);
.
.
.
ss(:,:,200) = s(9951:10000,:);
%======================%
為達成這個目的,我先製作了一筆每隔50就增加一次的次數累進表:
%====這個是嘗試撰寫的code====%
temp_d=ones(200,1);
temp_length=ones(200,1);
for i = 1:200;
temp_length(i,:)=50*i*temp_d(i,:);
end
%============================%
當要作最後的運算的時候,卻發現最後的矩陣迴圈運算拖慢了速度;
之前也有寫過類似的code但是卻沒有相同的問題,不知道是甚麼原因?
(之前寫的code就是前面一篇回文,當時使用的情形是處理二維資料)
ss = zeros(50,30,200); %%有預先配置空間%%
ss(:,:,1) = s(1:50,:);
ss(:,:,2) = s(51:100,:); %%先寫好前兩個,也沒有改變ss矩陣的形狀%%
%====以下是拖慢速度的code====%
for k = 3:200;
for j = 2:200-1;
for i = temp_length(j)+1:temp_length(j+1);
ss(:,:,k) = s((temp_length(j)+1:temp_length(j+1)),:);
end
end
end
請問一下,上面這樣的code,拖慢速度的原因是在哪裡啊?
ss三維矩陣並沒有形狀上的改變,也有預先配置空間....
會是因為迴圈數量太大嗎?還是說是因為涉及三維的運算?
(在自己電腦上測試過的經驗,迴圈數要超過1000才會有明顯的「慢」的感覺)
(總運算時間68秒....超過一分鐘....)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.123.213.195
推
07/11 03:54, , 1F
07/11 03:54, 1F
→
07/11 06:00, , 2F
07/11 06:00, 2F
※ 編輯: susuyumi 來自: 140.123.213.195 (07/11 06:18)
→
07/11 08:38, , 3F
07/11 08:38, 3F
推
07/11 08:59, , 4F
07/11 08:59, 4F
→
07/11 14:26, , 5F
07/11 14:26, 5F
→
07/11 14:27, , 6F
07/11 14:27, 6F
→
07/11 14:42, , 7F
07/11 14:42, 7F
※ 編輯: susuyumi 來自: 140.123.213.195 (07/11 14:48)
→
07/11 14:52, , 8F
07/11 14:52, 8F
討論串 (同標題文章)
完整討論串 (本文為第 4 之 5 篇):