MATLAB对于矩阵对角线置零、对角线置inf或NaN、对角线置任意数值的方法讨论

NAN转0

A=magic(10)

A =

92    99     1     8    15    67    74    51    58    40
98    80     7    14    16    73    55    57    64    41
 4    81    88    20    22    54    56    63    70    47
85    87    19    21     3    60    62    69    71    28
86    93    25     2     9    61    68    75    52    34
17    24    76    83    90    42    49    26    33    65
23     5    82    89    91    48    30    32    39    66
79     6    13    95    97    29    31    38    45    72
10    12    94    96    78    35    37    44    46    53
11    18   100    77    84    36    43    50    27    59

A(logical(eye(size(A))))=0

A =

 0    99     1     8    15    67    74    51    58    40
98     0     7    14    16    73    55    57    64    41
 4    81     0    20    22    54    56    63    70    47
85    87    19     0     3    60    62    69    71    28
86    93    25     2     0    61    68    75    52    34
17    24    76    83    90     0    49    26    33    65
23     5    82    89    91    48     0    32    39    66
79     6    13    95    97    29    31     0    45    72
10    12    94    96    78    35    37    44     0    53
11    18   100    77    84    36    43    50    27     0

最简单的方法
for i=1:n
a(i,i)=0;
end

1.首先生成一组测试矩阵
A=magic(5);
得到一个5*5的矩阵:

  1. A =
  2.  17    24     1     8    15
    
  3.  23     5     7    14    16
    
  4.   4     6    13    20    22
    
  5.  10    12    19    21     3
    
  6.  11    18    25     2     9
    

2.对角线置零
A=A-diag(diag(A));
得到如下矩阵:

  1. A =
  2.   0    24     1     8    15
    
  3.  23     0     7    14    16
    
  4.   4     6     0    20    22
    
  5.  10    12    19     0     3
    
  6.  11    18    25     2     0
    

3.对角线置inf
对角线为正的inf
A=A+diag(inf+zeros(1,length(A)))

  1. A =
  2. Inf    24     1     8    15
    
  3.  23   Inf     7    14    16
    
  4.   4     6   Inf    20    22
    
  5.  10    12    19   Inf     3
    
  6.  11    18    25     2   Inf
    

对角线为负的inf
A=A-diag(inf+zeros(1,length(A)))

  1. A =
  2. -Inf 24 1 8 15
  3.  23  -Inf     7    14    16
    
  4.   4     6  -Inf    20    22
    
  5.  10    12    19  -Inf     3
    
  6.  11    18    25     2  -Inf
    

4.对角线置NaN
A=A+diag(NaN+zeros(1,length(A)))
或者是
A=A+diag(inf+zeros(1,length(A)))-diag(inf+zeros(1,length(A)))
都可以使得对角线为NaN

  1. A =
  2. NaN    24     1     8    15
    
  3.  23   NaN     7    14    16
    
  4.   4     6   NaN    20    22
    
  5.  10    12    19   NaN     3
    
  6.  11    18    25     2   NaN
    

5.对角线为任意数值,这个目前好像只能是双循环解决了
即i=j的时候就是对角线,x是我们想要赋值的任意值

  1. for i=1:length(A)
  2.  for j=1:length(A)
    
  3.      if i==j
    
  4.          A=x;
    
  5.      end
    
  6.  end
    
  7. end
  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值