推 linforce:A=rand(100,100); 03/10 22:56
→ linforce:m=20;n=20; 03/10 22:56
→ linforce:B=reshape(A,m,100*100/m)% B is m * 10000/m 03/10 22:56
→ linforce:k=1:n:100*100/m 03/10 22:56
→ linforce:for(times=1:length(k)-1) 03/10 22:56
推 linforce: eval(sprintf('A%d=B(:, %d : %d );',times,k(times),k( 03/10 23:02
→ linforce:times+1)-1)) end 03/10 23:03
感謝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)
推 linforce:按照道理來說用了一個reshape 03/11 14:48
→ linforce:就只需要用一個for loop才對啊,難道我搞錯了? 03/11 14:49
推 linforce:把k向量的值或者times的值調整下應該就能得到你要的結果 03/11 14:55
剛剛調整了一下但沒有試成功(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)
→ ja20331:上面寫法我看不太懂,但是我會用cell來寫 04/11 03:55
→ ja20331:A=reshape(1:100*100,100,100); 04/11 03:55
→ ja20331:m=0; 04/11 03:55
→ ja20331:for i=1:20:100, m=m+1; B{m}=A(i:i+19,:); end 04/11 03:56
→ ja20331:A=cell(5,5); 04/11 03:56
→ ja20331:for i=1:m, for j=1:m,A{i,j}=reshape(B{i}(1+(400*(j-1)) 04/11 03:58
→ ja20331:A{i,j}=reshape(B{i}(1+(400*(j-1)):400*j),20,20); end 04/11 03:59
→ ja20331:完整 A{i,j}要看下面那行,上面被切到, 最後要兩個end 04/11 04:02