Re: [問題] 如何設定批次迴圈的次數已回收

看板MATLAB作者 (鈴弓)時間14年前 (2011/07/11 02:59), 編輯推噓2(206)
留言8則, 5人參與, 最新討論串4/5 (看更多)
不好意思,再次丟出一個問題來詢問。 我有一筆數列 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
跟前一篇文章(回文)的code比(都是我自己寫好測試的)
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
怪怪的… 你的意思是 s 10000x1 => ss 50x1x200 ?
07/11 08:59, 4F

07/11 14:26, , 5F
最後一個i迴圈 有要做什摸事嗎? 沒的話 可以拿掉...
07/11 14:26, 5F

07/11 14:27, , 6F
有的話 在看看作啥可以縮短時間吧...
07/11 14:27, 6F

07/11 14:42, , 7F
不好意思,s 應該是10000x30 => ss 50x30x200
07/11 14:42, 7F
※ 編輯: susuyumi 來自: 140.123.213.195 (07/11 14:48)

07/11 14:52, , 8F
抓出問題了!感謝diggershi版友的提示
07/11 14:52, 8F
文章代碼(AID): #1E6VQWgd (MATLAB)
討論串 (同標題文章)
文章代碼(AID): #1E6VQWgd (MATLAB)