Dire X
est une grande matrice creuse, où chaque ligne n'a qu'une entrée différente de zéro. J'ai un vecteur pos
avec les emplacements des colonnes où cet élément non nul va. Pour remplir la matrice, la boucle suivante fonctionne:
for (row in 1:nrow(X)) {
X[row, pos[row]] <- 1
}
Est-il possible de le faire sans boucle, en utilisant peut-être sapply
?
Réponses:
3 pour la réponse № 1Vous pouvez jeter un oeil à la sparseMatrix
fonction de Matrix:
> library(Matrix)
> (pos = sample(1:7))
[1] 5 1 6 4 7 2 3
> sparseMatrix(1:7, pos)
7 x 7 sparse Matrix of class "ngCMatrix"
[1,] . . . . | . .
[2,] | . . . . . .
[3,] . . . . . | .
[4,] . . . | . . .
[5,] . . . . . . |
[6,] . | . . . . .
[7,] . . | . . . .
Les fonctions de package Matrix prennent un certain temps, mais elles offrent de nombreux avantages lorsqu’on travaille avec des matrices éparses.