作者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