Умножение двух матриц в R - PullRequest
1 голос
/ 27 марта 2012

У меня есть 2 матрицы.

Первая: [1,2,3]

и вторая:

[3,1,2
 2,1,3
 3,2,1]

Я ищу способ умноженияих.

Результат должен быть: [11, 13, 10]

В R * mat1%*%mat2 не работает.

Ответы [ 3 ]

10 голосов
/ 27 марта 2012

Вам понадобится транспонирование второй матрицы, чтобы получить желаемый результат:

> v1 <- c(1,2,3)
> v2 <- matrix(c(3,1,2,2,1,3,3,2,1), ncol = 3, byrow = TRUE)
> v1 %*% t(v2)
     [,1] [,2] [,3]
[1,]   11   13   10

Или, возможно, быстрее (см. ?crossprod), если реальная проблема больше:

> tcrossprod(v1, v2)
     [,1] [,2] [,3]
[1,]   11   13   10
1 голос
/ 01 июня 2018

mat1% % mat2 На самом деле работает, это дает [16 9 11] но вы хотите mat1% % t (mat2). Это означает транспонирование второй матрицы, тогда вы можете получить [11 13 10]

RCODE:

mat1 = matrix(c(1,2,3),nrow=1,ncol=3,byrow=TRUE)
mat2 = matrix(c(3,1,2,2,1,3,3,2,1), nrow=3,ncol=3,byrow=TRUE)
print(mat1)
print(mat2 )
#matrix Multiplication
print(mat1 %*% mat2 )
# matrix multiply with second matrix with transpose
# Note of using  function t()
print(mat1 %*% t(mat2 ))
0 голосов
/ 11 ноября 2016

Трудно сказать, что лучший ответ здесь, потому что обозначение в вопросе не в R, а в Matlab. Трудно сказать, хочет ли спрашивающий умножить вектор, матрицу из 1 строки или матрицу из 1 столбца на смешанную запись.

Альтернативный ответ на этот вопрос - просто поменяйте порядок умножения.

v1 <- c(1,2,3)
v2 <- matrix(c(3,1,2,2,1,3,3,2,1), ncol = 3, byrow = TRUE)
v2 %*% v1

Это дает ответ, который представляет собой один столбец, а не одну строку матрицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...