加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

matlab 去除矩阵对角线元素重组矩阵

(2014-03-27 09:01:49)
标签:

cxd1301

矩阵对角线去除

matlab去对角线

轩辕小子

教育

分类: matlab

      近期收一求助,说需要用matlab去除对角线,并将结果矩阵存储。

      开始时由于问题沟通不畅,理解成是要去除矩阵第i行第i列组成新矩阵,于是给出了如下结果:

程序:

clear;

clc;

A = magic(4)

B = A(:);

[m,n] = size(A);

for ii = 1:n   

    cxd = 1:n;   

    cxd(ii) = []; 

    result_A{ii} = A(cxd,cxd);

end

结果:

A =

 

    16          13

       11    10     8

             12

       14    15     1

 

>> result_A

 

result_A =

 

    [3x3 double]    [3x3 double]    [3x3 double]    [3x3 double]

 

>> result_A{1,1}

 

ans =

 

    11    10     8

          12

    14    15     1

 

     而后,发现此结论非需求所要,再次沟通后方才理解是要去除矩阵对角元素,组成新矩阵。问题立马提升一个档次,经百度后发现未有较好现成方法。尝试多种方法,可以对角线先置0或其他值再删除,或者取上下三角,拼接,但总体效率都略低。后想起可以先转向量去除相应位置后,再重构矩阵。方法如下:

程序:

clear;

clc;

A = magic(4)

B = A(:);

[m,n] = size(A);

B(1:n+1:n*n) = [];

disp('删除对角线,左下角上提后:')

result_A1 = reshape(B,n-1,n)

 

C = A';

C = C(:);

C(1:n+1:n*n) = [];

disp('删除对角线,右上角左移后:')

result_A2 = reshape(C,n-1,n)'

结果:

A =

    16          13
       11    10     8
             12
       14    15     1

删除对角线,左下角上提后:

result_A1 =

             13
          10     8
       14    15    12

删除对角线,右上角左移后:

result_A2 =

          13
       10     8
          12
       14    15

     该方法,基本上不涉及矩阵操作,不用循环,当矩阵较大时较其他方法有更高的运行效率,相信其在图像处理中可以获得较好的应用。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有