Преобразуем матрицу из R в верхнюю треугольную/нижнюю треугольную матрицу с соответствующими элементами

У меня есть симметричная матрица, и я хочу преобразовать ее в верхнюю треугольную/нижнюю треугольную матрицу в R. Есть ли способ сделать это?

Я не могу это сделать, используя upper.tri и lower.tri. Используя их, я получаю матрицу с позициями как TRUE или FALSE.

Ответ 1

Чтобы получить верхнюю треугольную матрицу:

mat <- matrix(1:9, 3, 3)
mat[lower.tri(mat)] <- 0

Чтобы удалить диагональ, используйте:

mat[lower.tri(mat,diag=TRUE)] <- 0 или mat[!upper.tri(mat)] <- 0, как это было предложено в комментариях Каролиса.

Ответ 2

Пока предыдущий ответ прекрасен, руководство является вашим другом:

Нижняя и верхняя треугольная часть матрицы

Описание

Возвращает матрицу логики того же размера заданной матрицы с записи TRUE в нижнем или верхнем треугольнике.

Использование

lower.tri(x, diag = FALSE)
upper.tri(x, diag = FALSE)

Аргументы

x     

матрица.

diag

логично. Должна ли включаться диагональ?

См. также

diag, matrix.

Примеры

(m2 <- matrix(1:20, 4, 5))
lower.tri(m2)
m2[lower.tri(m2)] <- NA
m2

Ответ 3

Простой способ:

lower.triangle(X) #lower triangular

upper.triangle(X) #upper triangular

Или же:

library(Matrix)

tril(X) #lower triangular

triu(X) #upper triangular