Python - 如何找到一个下三角的NumPy矩阵的平方矩阵?(带有对称的上三角)

8

我生成了一个下三角矩阵,现在想要使用下三角矩阵中的值来填充矩阵,使其成为一个以对角线零值对称的方阵。

lower_triangle = numpy.array([
[0,0,0,0],
[1,0,0,0],
[2,3,0,0],
[4,5,6,0]])

我希望生成以下完整矩阵,保持零对角线:
complete_matrix = numpy.array([
[0, 1, 2, 4],
[1, 0, 3, 5],
[2, 3, 0, 6],
[4, 5, 6, 0]])

感谢您的选择。
2个回答

10

你可以将它简单地加到它的转置中:

>>> m
array([[0, 0, 0, 0],
       [1, 0, 0, 0],
       [2, 3, 0, 0],
       [4, 5, 6, 0]])
>>> m + m.T
array([[0, 1, 2, 4],
       [1, 0, 3, 5],
       [2, 3, 0, 6],
       [4, 5, 6, 0]])

7
您可以使用numpy.triu_indices或numpy.tril_indices函数:
>>> a=np.array([[0, 0, 0, 0],
...             [1, 0, 0, 0],
...             [2, 3, 0, 0],
...             [4, 5, 6, 0]])
>>> irows,icols = np.triu_indices(len(a),1)
>>> a[irows,icols]=a[icols,irows]
>>> a
array([[0, 1, 2, 4],
       [1, 0, 3, 5],
       [2, 3, 0, 6],
       [4, 5, 6, 0]])

@DSM 我已经更正了我的原始答案,现在我的数组对称了。 - rtrwalker
这是比 DSM 的回答更好的答案,因为它不依赖于对角元素为零。 - Brian B

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接