Подтвердить что ты не робот

R: матрица путем векторного умножения

У меня есть следующая проблема:

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

Я хочу умножить mymat с myvec и построить новый вектор таким образом, чтобы

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

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

Извините, это простой вопрос, который я не знаю...

Изменить: опечатка исправлена ​​

4b9b3361

Ответ 1

Оператор %*% в R имеет матричное умножение:

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

Ответ 2

Если вам нужен векторный результат вместо результата матрицы в качестве вывода, вы также можете использовать.

apply(mymat*myvec,1,sum)

Немного больше обходного решения, чем Оуэн, но оно работает.

Ответ 3

Матрицы - это векторы в главном порядке столбца:

 colSums(  t(mymat) * myvec )  

(Отредактировано после того, как мы надеемся правильно прочитать вопрос на этот раз.)

Ответ 4

Оуэн совершенно прав. Проблема заключалась не в различении dot(scalar) и перекрестных продуктов. для скалярного произведения *, а для поперечного произведения %*% - операторы

Ответ 5

Альтернативным вариантом может быть следующий:

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

Единственный способ, который я нашел, который может игнорировать NA внутри матрицы.