Re: [問題] 請問如何使用矩陣取代這個迴圈

看板MATLAB作者 (UNFAIR)時間17年前 (2007/05/10 15:32), 編輯推噓2(203)
留言5則, 1人參與, 最新討論串2/2 (看更多)
: M1=reshape(repmat(M(:)',2,1),size(M,1)*2,size(M,2))'; : M2=reshape(repmat(M1(:)',2,1),size(M1,1)*2,size(M1,2)); : M2([1 end],:)=[]; : M2(:,[1 end])=[]; : a=reshape(sum(reshape(M2(:,[1:2:end,2:2:end]),[],2),2),2,[]) : 基本的技巧是把重複的部份先使用repmat擴張處理 : 然後reshape成全部小矩陣疊在一起的樣子 : 最後再使用sum完成相加後 : 重新reshape成輸出的樣子即可 萬分感謝這個好方法 速度增加了不少 只是請問要是M矩陣變成1024*1024 要相加的小矩陣變成17*17 這樣2G的記憶體好像還不夠吃@@ 我有用uint16做處理了 r=17 [M,x]=hist(A,x); M=uint16(M); M1=reshape(repmat(M(:)',r,1),size(M,1)*r,size(M,2))'; M1=reshape(repmat(M1(:)',r,1),size(M1,1)*r,size(M1,2)); M1([1 end],:)=[]; M1(:,[1 end])=[]; a=reshape(sum(reshape(M1(:,[1:2:end,2:2:end]),[],2),2),2,[]); 但是a好像會變成超級大 吃下M1之後就吃不下a了 請問對大矩陣有解決的方法嗎? 再次感謝 -- 我有想到可以切成4塊啦 只是這樣運算時間會多一些 記憶體真的是怪物... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.115.206.33 ※ 編輯: CDavid 來自: 140.115.206.33 (05/10 15:41)

05/10 15:48, , 1F
運算a之前,先把M clear掉好了,不過我覺得應該不會差太
05/10 15:48, 1F

05/10 15:49, , 2F
多啦(汗),必要時就拆開來做吧,跑四次迴圈速度應該還
05/10 15:49, 2F

05/10 15:50, , 3F
算在可以接受的範圍裡
05/10 15:50, 3F

05/10 19:20, , 4F
還有我不確定小矩陣改成17*17是不是對的,我只能確定小
05/10 19:20, 4F

05/10 19:20, , 5F
矩陣是2*2時是對的
05/10 19:20, 5F
文章代碼(AID): #16GigVSt (MATLAB)
文章代碼(AID): #16GigVSt (MATLAB)