精華區beta MATLAB 關於我們 聯絡資訊
: 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)
Gwaewluin:運算a之前,先把M clear掉好了,不過我覺得應該不會差太 05/10 15:48
Gwaewluin:多啦(汗),必要時就拆開來做吧,跑四次迴圈速度應該還 05/10 15:49
Gwaewluin:算在可以接受的範圍裡 05/10 15:50
Gwaewluin:還有我不確定小矩陣改成17*17是不是對的,我只能確定小 05/10 19:20
Gwaewluin:矩陣是2*2時是對的 05/10 19:20