矩阵成倍扩展问题
本帖最后由 scott198510 于 2011-3-16 23:14 编辑比如如下矩阵
A =
2 3 4 5
6 7 8 9
10 11 12 13
14 15 16 17
现在要把矩阵每一行的元素扩展为两行,每一列的元素也扩展为两列,扩展后的矩阵如下:
B =
2 2 3 3 4 4 5 5
2 2 3 3 4 4 5 5
6 6 7 7 8 8 9 9
6 6 7 7 8 8 9 9
10 10 11 11 12 12 13 13
10 10 11 11 12 12 13 13
14 14 15 15 16 16 17 17
14 14 15 15 16 16 17 17
然后将矩阵B矩阵变成这样的一个矩阵:
C=2 2 3 3 4 4 5 5 []
2 2 3 3 4 4 5 5 []
[ ] 6 6 7 7 8 8 9 9
[ ] 6 6 7 7 8 8 9 9
10 10 11 11 12 12 13 13 [ ]
10 10 11 11 12 12 13 13 [ ]
[ ] 14 14 15 15 16 16 17 17
[ ] 14 14 15 15 16 16 17 17
也就是对于原来矩阵A里面的元素,位于偶数行的开头的元素就向右边错动一列,同时把第一列补为空格,奇数行没有右错动的就在右边补空格,保证变换后的矩阵的维数正确,由于实际矩阵维数很大,哪位大虾看看怎么用算法实现呢?
只能用cell了 然后行列分别复制 1# scott198510
clear;clc;close all
N = 4;
A = reshape(2:17,N,[])';
B = kron(A,ones(2));
C = ;
for i = 2*2-1:4:2*N
C(i:i+1,:)=circshift(C(i:i+1,:),);
end
A,B,C
A =
2 3 4 5
6 7 8 9
10 11 12 13
14 15 16 17
B =
2 2 3 3 4 4 5 5
2 2 3 3 4 4 5 5
6 6 7 7 8 8 9 9
6 6 7 7 8 8 9 9
10 10 11 11 12 12 13 13
10 10 11 11 12 12 13 13
14 14 15 15 16 16 17 17
14 14 15 15 16 16 17 17
C =
2 2 3 3 4 4 5 5 NaN
2 2 3 3 4 4 5 5 NaN
NaN 6 6 7 7 8 8 9 9
NaN 6 6 7 7 8 8 9 9
10 10 11 11 12 12 13 13 NaN
10 10 11 11 12 12 13 13 NaN
NaN 14 14 15 15 16 16 17 17
NaN 14 14 15 15 16 16 17 17
3# qibbxxt
版主的函数确实炉火纯青,这两个函数都没用过,
如果是是错动成这种效果呢:
11223344
11223344
qqwweerr
qqwweerr
zzxxccvv
zzxxccvv
即从原有矩阵第二行开始逐行错动(新矩阵是两行两行的错动)右边补空位,原来的矩阵NXN 变为2NX 3N-1
4# scott198510
具体的位置你去控制吧,我给你一个例子
A0 = {1,2,3,4,NaN;'q','w','e','r',NaN;'z','x','c','v',NaN};
A = reshape(1:numel(A0),size(A0));
N = size(A,1);
B = kron(A,ones(2));
for i = 1:2:size(B)
B(i:i+1,:)=circshift(B(i:i+1,:),);
end
C = A0(B);
=...
deal(feval(@(x)x{:},cell(size(A0,1)*4,1)))
C =
[] []
[] []
[] 'q' 'q' 'w' 'w' 'e' 'e' 'r' 'r' []
[] 'q' 'q' 'w' 'w' 'e' 'e' 'r' 'r' []
[] [] 'z' 'z' 'x' 'x' 'c' 'c' 'v' 'v'
[] [] 'z' 'z' 'x' 'x' 'c' 'c' 'v' 'v'
7# scott198510
我用的是2010b的版本,运行没有警告的
颜色方面的话,你得看相关的书籍或者网上找找 本帖最后由 liuyalong008 于 2011-3-22 09:53 编辑
9# scott198510
最近由于考博论文太忙了,不好意思,不打算在QQ回你是由于想让大家指正,不要老用imagesc,你还不如用image然后设置cdatamapping属性为 scaled,这样虽然麻烦但是对你非常有好处,
用pcolor或者surface,surf等可以显示,不一定非要image,imshow
显式的时候顺便设置一下linestyle属性就行 % 分别用surf 和pcolor 函数搞定了边上白色的要求:
C=flipdim(C,1);
figure ; pcolor(C);
shading interp
set(gca,'box','off')
set(gcf,'color','w');
axis off
figure; surf(C);
shading interp
az =0;
el =90;
view(az, el);
set(gca,'box','off')
set(gcf,'color','w');
axis off
页:
[1]