从非对称矩阵得到上三角矩阵

yli*_*gle 6 r matrix

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

谢谢. 在此输入图像描述

Jul*_*ora 5

实际上并不那么困难:

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

想象一下,你的照片是R ^ 2空间的右上角四分之一.也就是说,左下角对应于(0,0),依此类推.设nc并分别nr对应矩阵中的列数和行数.另外,设置cr对应于特定单元格的列和行.

很容易看出对角线的方程式是y = nr - nr / nc * x通常的表示法.剩下的是计算与每个(c,r)单元相对应的区域.这个单元格的上线位于该级别y = nr - r + 1,并且从该位置x = c - 1开始x = c.每当此区域大于1/2时,我们将此单元格包括在答案中.这些区域的矩阵由下式给出

nrow(mat) * (2 * col(mat) - 1) / (2 * ncol(mat)) - row(mat) + 1
Run Code Online (Sandbox Code Playgroud)

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

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

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