scott198510 发表于 2011-3-16 22:40:16

矩阵成倍扩展问题

本帖最后由 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里面的元素,位于偶数行的开头的元素就向右边错动一列,同时把第一列补为空格,奇数行没有右错动的就在右边补空格,保证变换后的矩阵的维数正确,由于实际矩阵维数很大,哪位大虾看看怎么用算法实现呢?

anbcjys 发表于 2011-3-17 06:18:28

只能用cell了 然后行列分别复制

qibbxxt 发表于 2011-3-17 08:38:18

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

scott198510 发表于 2011-3-17 21:21:55

3# qibbxxt
版主的函数确实炉火纯青,这两个函数都没用过,
如果是是错动成这种效果呢:
11223344
11223344
qqwweerr
qqwweerr
    zzxxccvv
    zzxxccvv
即从原有矩阵第二行开始逐行错动(新矩阵是两行两行的错动)右边补空位,原来的矩阵NXN 变为2NX 3N-1

qibbxxt 发表于 2011-3-18 09:24:30

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'

qibbxxt 发表于 2011-3-18 13:24:20

7# scott198510
我用的是2010b的版本,运行没有警告的
颜色方面的话,你得看相关的书籍或者网上找找

liuyalong008 发表于 2011-3-22 09:51:52

本帖最后由 liuyalong008 于 2011-3-22 09:53 编辑

9# scott198510

最近由于考博论文太忙了,不好意思,不打算在QQ回你是由于想让大家指正,不要老用imagesc,你还不如用image然后设置cdatamapping属性为 scaled,这样虽然麻烦但是对你非常有好处,
用pcolor或者surface,surf等可以显示,不一定非要image,imshow

显式的时候顺便设置一下linestyle属性就行

scott198510 发表于 2011-5-1 19:27:38

% 分别用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]
查看完整版本: 矩阵成倍扩展问题