web-dev-qa-db-fra.com

Convertir une matrice dans R en une matrice triangulaire supérieure/triangulaire inférieure avec les entrées correspondantes

J'ai une matrice symétrique et je veux la convertir en matrice triangulaire supérieure/triangulaire inférieure en R. Existe-t-il un moyen de le faire?

Je ne peux pas faire cela en utilisant upper.tri et lower.tri. Leur utilisation me donne une matrice avec des entrées de type TRUE ou FALSE.

15
Anurag Mishra

Pour obtenir la matrice triangulaire supérieure:

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

Pour supprimer la diagonale, utilisez:

mat[lower.tri(mat,diag=TRUE)] <- 0 ou mat[!upper.tri(mat)] <- 0 comme suggéré dans les commentaires de Karolis.

27
Ujjwal

Alors que la réponse précédente est parfaite, le manuel est votre ami:

Partie triangulaire inférieure et supérieure d'une matrice

La description

Retourne une matrice de logiques de la même taille qu'une matrice donnée avec les entrées VRAI dans le triangle inférieur ou supérieur.

Usage

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

Arguments

x     

une matrice.

diag

logique. La diagonale devrait-elle être incluse?

Voir également

diag , matrice .

Exemples

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

Un moyen simple:

lower.triangle(X) #lower triangular

upper.triangle(X) #upper triangular

Ou:

library(Matrix)

tril(X) #lower triangular

triu(X) #upper triangular
2
mengjiao zhang