Multiplier les lignes de la matrice par le vecteur?
J'ai un numérique matrix
avec 25 colonnes et 23 lignes, et un vecteur de longueur 25. Comment puis-je multiplier chaque ligne de la matrice par le vecteur sans l'aide d'un for
boucle?
Le résultat devrait être une 25x23 de la matrice (de la même taille que l'entrée), mais chaque ligne a été multiplié par le vecteur.
Ajouté reproductible à l'exemple de @hatmatrix réponse:
matrix <- matrix(rep(1:3,each=5),nrow=3,ncol=5,byrow=TRUE)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 1 1 1 1
[2,] 2 2 2 2 2
[3,] 3 3 3 3 3
vector <- 1:5
De sortie souhaité:
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 3 4 5
[2,] 2 4 6 8 10
[3,] 3 6 9 12 15
Vous devez vous connecter pour publier un commentaire.
Je pense que vous êtes à la recherche pour
sweep()
.C'est l'un des R les fonctions de base, même si des améliorations ont été apportées sur elle au fil des ans.
Vous pouvez utiliser soit:
ou:
En fait,
sweep
n'est pas l'option la plus rapide sur mon ordinateur:Cela donne:
En plus d'être l'option la plus lente, la deuxième option atteint la limite de la mémoire (2046 MO). Toutefois, considérant le reste des options, le double transposition semble beaucoup mieux que
sweep
à mon avis.Modifier
Juste en essayant de données plus petite a répété nombre de fois:
NA
s dans la matrice, le temps pris par lesdiag
semble aller à travers le toit. Pour un 1E4x1E4 mat contenant 1E5NA
s, - je obtenir:MyTimerTranspose
=0.014,MyTimerSweep
=0.042,MyTimerDiag
=67.738. Je voudrais répliquer, mais je suis impatient... juste quelque chose à garder à l'esprit.Pour la vitesse, on peut créer de la matrice par le vecteur avant de multiplier