【问题标题】:How to merge an upper and lower triangular, also adding a diagonal of 1s如何合并上下三角形,还添加1s的对角线
【发布时间】:2021-07-09 00:10:37
【问题描述】:

我有一个上下对角三角矩阵,我想合并它们,还要添加一个对角线 1。

这就是我所拥有的......

upper = np.array([[0.90858992, 0.96590361, 0.95616282],
                 [       np.nan, 0.90055735, 0.8956839 ],
                 [       np.nan,        np.nan, 0.94590614]])

还有更低的……

lower = np.array([[0.90858992,   np.nan,   np.nan    ],
                  [0.96590361, 0.90055735, np.nan    ],
                  [0.95616282, 0.8956839 , 0.94590614]])

这就是我想要制作的:

np.array([
          [1, 0.90858992, 0.96590361,     0.95616282    ],
          [0.90858992,   1,     0.90055735,    0.8956839],
          [0.96590361, 0.90055735,        1, 0.94590614 ],
          [0.95616282, 0.8956839 , 0.94590614,    1     ]])

有人对我如何实现这个预期结果有任何建议吗?我尝试过矩阵加法,但似乎无法正常工作

【问题讨论】:

  • x1=np.triu(upper)+np.tril(lower) ; out=x1-np.diag(np.diag(x1)-1)

标签: python numpy


【解决方案1】:

你可以从单位矩阵开始,然后填充上/下三角部分。

要访问输入矩阵和输出矩阵的上三角/下三角部分,您可以使用np.triu_indicesnp.tril_indices

以下代码应创建预期的out 数组。

n = len(upper) + 1
out = np.eye(n)
out[np.triu_indices(n, 1)] = upper[np.triu_indices(n-1)]
out[np.tril_indices(n, -1)] = lower[np.tril_indices(n-1)]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-12
    • 2018-09-03
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    相关资源
    最近更新 更多