作者onezillion (宝贝)
看板MATLAB
标题Re: [问题] 不用回圈,让两个矩阵做local的运算
时间Thu Jan 29 18:03:14 2015
a=rand(5,6);
b=rand(5,6);
m1=size(a,1)-2;
idx1=reshape(repmat((0:2)',[1,m1])+repmat((1:m1),[3,1]),[3*m1,1]);
m2=size(a,2)-2;
idx2=reshape(repmat((0:2)',[1,m2])+repmat((1:m2),[3,1]),[3*m2,1]);
a1=a(idx1,idx2);
b1=b(idx1,idx2);
% 空间换取回圈, 把所有local matrix合并成一个大的matrix, 直接做a1,b1的运算
% 不过只能做element by element运算, 其他像是反矩阵, det, 矩阵乘除都不行
% 你的问题只有把矩阵撷取出来, 怎麽放回原位就靠你了
方法二
生出九组array,每个array对应所有local matrix的个别element的index,
然後在叫出各个element做运算
array生成方法类似上面
※ 引述《waterCoka (Coka)》之铭言:
: 有两个5x5矩阵如下:
: M = [ A1 A2 A3 o o ; M2 = [ B1 B2 B3 o o ;
: A4 A5 A6 o o ; B4 B5 B6 o o ;
: A7 A8 A9 o o ; B7 B8 B9 o o ;
: o o o o o ; o o o o o ;
: o o o o o ; o o o o o ;
: ] ]
: 我想让两个矩阵针对各个3x3的local matrix做运算
: 例如:
: 当位置在(2,2)时,M跟M2会以位置(2,2)当中心,分别撷取出3x3的local matrix
: M_l = [ A1 A2 A3 ; M2_l = [ B1 B2 B3 ;
: A4 A5 A6 ; B4 B5 B6 ;
: A7 A8 A9 ; B7 B8 B9 ;
: ] ]
: 在得到local matrix後,先对local matrix的内部做运算来改变M_l跟M2_1原有的值,
接?
: 再利用M_l .* M2_l来产生一个新的matrix,并把矩阵内值加总起来当作这个位置新的
值
: 最後的目标是每个位置都用上述的方式来执行,意即从位置(1,1)~(5,5)都跑过一次
: 不使用回圈的原因是矩阵过大,跑两个for loop再加上运算的话所需时间会很久
: 而要先撷取出local matrix是因为还需要做一些local matrix的内部运算来改变M_l跟
: M2_1原有的值
: 问题:请问有没有不使用回圈的方式就可以把2个矩阵各个local的区域给撷取出来?
: 或是把local的区域储存在cell中之类的方式?
: 像是cell位置(1,1)存的是以(1,1)为中心的3x3 local matrix,其他以此类推
: 希望各位先进能够提供一些方法或是建议
: 谢谢
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.109.82.254
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1422525797.A.3B9.html
※ 编辑: onezillion (123.193.172.189), 01/29/2015 18:37:54
1F:推 waterCoka: 谢谢你的回覆 有没有类似的方法能够运用在cell上呢? 01/29 18:54
2F:→ waterCoka: 假设缺少邻居的部分都已经补0 01/29 18:54
3F:→ waterCoka: 也就是以位置(1,1)为中心的A1 取3x3 matrix 01/29 18:55
4F:→ waterCoka: 并且把这个matrix存放到cell(1,1)中 其他位置也是一样 01/29 18:55
5F:推 waterCoka: 也就是有25个3x3 matrix 01/29 19:25
6F:→ onezillion: cell用pointer,读写连续性应该不会比matrix好,大量资 01/29 19:47
7F:→ onezillion: 料下效能不见得高,而且还要多个loop先把matrix转成cel 01/29 19:47
8F:→ onezillion: l 01/29 19:47
9F:推 waterCoka: 会想分开存原因是 除了自己local内部要做运算 01/29 20:05
10F:→ waterCoka: 还要额外跟另一个local matrix相乘 01/29 20:05
11F:推 waterCoka: 若是用此方式取得local matrix 计算时还是会用到loop 01/29 20:18