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,其他以此類推
: 希望各位先進能夠提供一些方法或是建議
: 謝謝