作者CDavid (UNFAIR)
看板MATLAB
標題Re: [問題] 請問如何使用矩陣取代這個迴圈
時間Thu May 10 15:32:45 2007
: 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)
1F:推 Gwaewluin:運算a之前,先把M clear掉好了,不過我覺得應該不會差太 05/10 15:48
2F:→ Gwaewluin:多啦(汗),必要時就拆開來做吧,跑四次迴圈速度應該還 05/10 15:49
3F:→ Gwaewluin:算在可以接受的範圍裡 05/10 15:50
4F:推 Gwaewluin:還有我不確定小矩陣改成17*17是不是對的,我只能確定小 05/10 19:20
5F:→ Gwaewluin:矩陣是2*2時是對的 05/10 19:20