web-dev-qa-db-fra.com

R: matrice par multiplication vectorielle

J'ai le problème suivant: 

myvec <- c(1:3)

mymat <- as.matrix(cbind(a = 6:15, b = 16:25, c= 26:35))
mymat
       a  b  c
 [1,]  6 16 26
 [2,]  7 17 27
 [3,]  8 18 28
 [4,]  9 19 29
 [5,] 10 20 30
 [6,] 11 21 31
 [7,] 12 22 32
 [8,] 13 23 33
 [9,] 14 24 34
[10,] 15 25 35

Je veux multiplier le mymat avec myvec et construire un nouveau vecteur tel que 

sum(6*1, 16*2, 26*3) 
sum(7*1, 17*2, 27*3)

....................
sum(15*1, 25*2, 35*3)

Désolé, c'est une simple question que je ne connais pas ...

Edit: typo corrigée 

20
jon

L'opérateur %*% dans R effectue la multiplication de matrice:

> mymat %*% myvec
      [,1]
 [1,]  116
 [2,]  122
 ...
[10,]  170
39
Owen

Si vous voulez un résultat vectoriel au lieu d'un résultat matriciel, vous pouvez également utiliser ..

apply(mymat*myvec,1,sum)

Un peu plus d'une solution giratoire que celle d'Owen, mais cela fonctionne.

2
thelatemail

Les matrices sont des vecteurs en ordre majeur de colonne:

 colSums(  t(mymat) * myvec )  

(Edité après avoir lu la question, espérons, correctement cette fois.)

0
42-

Une alternative, mais plus longue peut être celle-ci:

rowSums(t(apply(mymat, 1, function(x) myvec*x)),na.rm=T)

C’est le seul moyen que j’ai trouvé qui puisse ignorer les NA dans la matrice.

0
Liliana Pacheco