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的矩阵:
- A =
-
17 24 1 8 15
-
23 5 7 14 16
-
4 6 13 20 22
-
10 12 19 21 3
-
11 18 25 2 9
2.对角线置零
A=A-diag(diag(A));
得到如下矩阵:
- A =
-
0 24 1 8 15
-
23 0 7 14 16
-
4 6 0 20 22
-
10 12 19 0 3
-
11 18 25 2 0
3.对角线置inf
对角线为正的inf
A=A+diag(inf+zeros(1,length(A)))
- A =
-
Inf 24 1 8 15
-
23 Inf 7 14 16
-
4 6 Inf 20 22
-
10 12 19 Inf 3
-
11 18 25 2 Inf
对角线为负的inf
A=A-diag(inf+zeros(1,length(A)))
- A =
- -Inf 24 1 8 15
-
23 -Inf 7 14 16
-
4 6 -Inf 20 22
-
10 12 19 -Inf 3
-
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
- A =
-
NaN 24 1 8 15
-
23 NaN 7 14 16
-
4 6 NaN 20 22
-
10 12 19 NaN 3
-
11 18 25 2 NaN
5.对角线为任意数值,这个目前好像只能是双循环解决了
即i=j的时候就是对角线,x是我们想要赋值的任意值
- for i=1:length(A)
-
for j=1:length(A)
-
if i==j
-
A=x;
-
end
-
end
- end