在MATLAB中对齐矩阵的更有效方法?

Sib*_*ing 1 matlab

我有一个"几乎对称"的矩阵,我希望在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)

是否有更好(更有效或更快)的方法来实现这一目标?

Sha*_*hai 6

关于什么

B = max( A, A.' );
Run Code Online (Sandbox Code Playgroud)

假设所有条目A都是非负的.