【问题标题】:Get upper triangular matrix from nonsymmetric matrix从非对称矩阵中获取上三角矩阵
【发布时间】:2018-10-25 23:24:00
【问题描述】:

有没有一种简单的方法来检索 R 中非对称矩阵的上(或下)三角矩阵?对于对称矩阵,这可以使用mat[upper.tri(mat)] 来实现,但是对于非对称矩阵呢?这里上三角矩阵的定义是这样的:如果一个单元格超过其 1/2 的部分属于对角线分隔的矩阵的右上角,则该单元格属于上三角矩阵(例如,图中红色部分)。

谢谢。

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    其实没那么难:

    mat[nrow(mat) * (2 * col(mat) - 1) / (2 * ncol(mat)) - row(mat) > -1/2]
    # [1]  4  7 10 11 13 14 15
    

    假设您的图片是 R^2 空间的右上四分之一。即左下角对应(0,0),以此类推。让ncnr 分别对应矩阵中的列数和行数。另外,让cr 对应于特定单元格的列和行。

    很容易看出,对角线的方程在通常的符号中是y = nr - nr / nc * x。剩下的就是计算每个 (c,r) 单元格对应的面积。该单元格的上一行位于y = nr - r + 1 级别,从x = c - 1x = c。每当这个面积大于 1/2 时,我们就将这个单元格包含在答案中。这些区域的矩阵由下式给出

    nrow(mat) * (2 * col(mat) - 1) / (2 * ncol(mat)) - row(mat) + 1
    

    虽然矩阵不是正方形,但仍然有很多对称性,如果矩阵很大,您可以利用它并计算仅 25%~ 单元格的面积,但我认为这里不是这种情况.

    由于这种对称性,下三角矩阵也很容易得到:

    mat[nrow(mat) * (2 * col(mat) - 1) / (2 * ncol(mat)) - row(mat) < -1/2]
    # [1]  1  2  3  5  6  9 12
    

    【讨论】:

    • 完美,正是我即将发布的内容——除了我不知道colrow,这让这变得容易多了。
    • 非常聪明! :-)
    • 很好的解决方案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-21
    • 1970-01-01
    • 2016-10-03
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多