Преобразуем матрицу из 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