我有一个"几乎对称"的矩阵,我希望在MATLAB中对称化.例如,我希望对称化
>> A = [0 0 1; 2 0 3; 0 3 0]
A =
0 0 1
2 0 3
0 3 0
Run Code Online (Sandbox Code Playgroud)
成
>> B
B =
0 2 1
2 0 3
1 3 0
Run Code Online (Sandbox Code Playgroud)
安全假设是对角线条目A全部为零,"要改变的位"总是如此0.例如,我改变了A(1, 2),A(3, 1)在上面的例子中,两个位置的原始值都是0.
基于@ Photon评论(感谢Photon!)的最佳尝试是
>> C = -0.5*(A.'.*A~=0)+1;
>> B = (A+A.').*C
B =
0 2 1
2 0 3
1 3 0
Run Code Online (Sandbox Code Playgroud)
是否有更好(更有效或更快)的方法来实现这一目标?