[討論] 矩陣拆解成小矩陣
各位前輩賢拜好
小的想要把100*100的矩陣拆解成每個大小20*20的小矩陣
有試過了一小段code但發現跑出來的是對角線20*20的小矩陣
如果要跑出全部的小矩陣就得土法煉鋼的一段一段寫
想請教前輩有什麼好方法拆解矩陣
(原來試的code)
A是原來100*100的矩陣
r=100 %列的數目
c=100 %行的數目
for i=1:20:r,
for k=19 %一次加19
for n=(i+k),
if n<=r && n<=c %n的值不超過行跟列的值
eval(sprintf('A%dv%d=A(i:i+%d,i:i+%d)',i,n,k,k));
else
end;
end;
end;
end
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.114.234.45
推
03/10 22:56, , 1F
03/10 22:56, 1F
→
03/10 22:56, , 2F
03/10 22:56, 2F
→
03/10 22:56, , 3F
03/10 22:56, 3F
→
03/10 22:56, , 4F
03/10 22:56, 4F
→
03/10 22:56, , 5F
03/10 22:56, 5F
推
03/10 23:02, , 6F
03/10 23:02, 6F
→
03/10 23:03, , 7F
03/10 23:03, 7F
感謝l大
這跑出來的小矩陣跟原來矩陣排列不一樣??
我忘了說切出來的小矩陣裡面元素排列要跟原本的一樣
像是
[ 1 2 3 4 ] [ 1 2 ] [ 3 4 ] [ 9 10 ]
[ 5 6 7 8 ] 切成 [ 5 6 ],[ 7 8 ],[13 14 ],....
[ 9 10 11 12 ]
[ 13 14 15 16 ]
我剛剛參考I大試了把15*15的矩陣分成每個5*5小矩陣
我的想法是
因為reshape的B是從A裡面從上往下排
這樣每個小矩陣的第一行就是B的第1、16、31、 2、17、32 、3、18、33、
然後再把提B的第 1, 1+3 ,1+6 ,1+9 ,1+12 行 合成一個小矩陣
'' 16, 16+3 ,16+6 ,16+9 ,16+12 ''
code如下
A=randint(15,15,[1 9]); %隨機15*15 裡面元素1~9的矩陣
m=5;n=5;
B=reshape(A,m,[])
for i=1:1:3
for k=i:15:[(3-1)*15+i]
eval(sprintf('Ai%dk%d=[B(:,%d) B(:,(%d+3)) B(:,(%d+6)) B(:,(%d+9))
B(:,(%d+12))];',i,k,k,k,k,k,k))
end;
end;
圖:http://cl.ly/image/3d2b1X3Y0940/o
雖然可以做出來但很不高明
因為完全是土法煉鋼0.0
要是分的小矩陣一多就...
不知道有沒有通用的解法
感恩
※ 編輯: ntme 來自: 140.114.234.45 (03/11 02:20)
推
03/11 14:48, , 8F
03/11 14:48, 8F
→
03/11 14:49, , 9F
03/11 14:49, 9F
推
03/11 14:55, , 10F
03/11 14:55, 10F
剛剛調整了一下但沒有試成功(matlab新手0.0)
不過參考I大在其它篇關於矩陣合併的code又改了一下code
想法是把reshape的B裡面的第1、4、7、10....行都提出來令成新矩陣T
再把T的1~5,6~10,11~15的矩陣提出來
A=randint(15,15,[1 9]);
m=5;n=5;
B=reshape(A,m,[])
T=[]
for i=1:3:15*15/5,
eval(sprintf('T=[T B(:,%d)]',i))
end;
for ii=1:5:15*15/5/3,
eval(sprintf('T%d=T(:,%d:%d+4)',ii,ii,ii))
end;
圖:http://cl.ly/image/2Q1f3O2L1V39/o
※ 編輯: ntme 來自: 140.114.234.45 (03/11 15:52)
剛剛沒用reshape改用兩個for 好像成功惹??
A=randint(15,15,[1 9]);
for i=1:5:15,
for j=1:5:15
eval(sprintf('A%dv%d=A(%d:%d+4,%d:%d+4)',i,j,i,i,j,j))
end;
end;
% A6v11 代表A矩陣第(6,11)的元素開始分割出來的小矩陣
※ 編輯: ntme 來自: 140.114.234.45 (03/11 16:25)
→
04/11 03:55, , 11F
04/11 03:55, 11F
→
04/11 03:55, , 12F
04/11 03:55, 12F
→
04/11 03:55, , 13F
04/11 03:55, 13F
→
04/11 03:56, , 14F
04/11 03:56, 14F
→
04/11 03:56, , 15F
04/11 03:56, 15F
→
04/11 03:58, , 16F
04/11 03:58, 16F
→
04/11 03:59, , 17F
04/11 03:59, 17F
→
04/11 04:02, , 18F
04/11 04:02, 18F
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章