我有一个几乎对称的"矩阵,我希望在MATLAB中对称化。例如,我希望对称化
>> A = [0 0 1; 2 0 3; 0 3 0]
A =
0 0 1
2 0 3
0 3 0
进入
>> B
B =
0 2 1
2 0 3
1 3 0
安全假设是A
的对角线条目都为零,而且#34;要改变的位数"总是0
。例如,我在上面的示例中更改了A(1, 2)
和A(3, 1)
,两个位置的原始值都是0
。
基于@Photon's comment(感谢Photon!)的最佳尝试是
>> C = -0.5*(A.'.*A~=0)+1;
>> B = (A+A.').*C
B =
0 2 1
2 0 3
1 3 0
是否有更好(更高效或更快)的方法来实现这一目标?
答案 0 :(得分:6)
怎么样?
B = max( A, A.' );
假设A
的所有条目都是非负数。