从非对称矩阵获取上三角矩阵

时间:2018-10-25 13:30:19

标签: r matrix

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

谢谢。 enter image description here

1 个答案:

答案 0 :(得分:5)

实际上并不难:

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