Умножение матриц в г - PullRequest
       19

Умножение матриц в г

4 голосов
/ 16 марта 2012

Я пытаюсь умножить каждую строку матрицы на столбец другой матрицы.Например:

mat1 <- matrix(rnorm(10), nrow=5, ncol=2)
mat2 <- matrix(rnorm(5), nrow=5)

Я хочу умножить каждый ряд mat1 на mat2.Желаемая форма вывода составляет 5 * 2.

Ответы [ 2 ]

5 голосов
/ 16 марта 2012

Вы можете просто использовать apply() для умножения каждого столбца mat1 на mat2 . ("*" будет выполнять типично векторизованное умножение R двух векторов одинаковой длины).

apply(mat1, 2, "*", mat2)
           [,1]       [,2]
[1,]  0.1785476  0.4175557
[2,]  0.2644247 -0.3745997
[3,] -0.5328542  0.8945527
[4,] -2.7351502 -0.7715341
[5,] -0.9719129 -0.1346929

Или, что еще лучше, конвертируйте mat1 в вектор, чтобы воспользоваться правилами переработки R:

mat2 <- matrix(1:10, ncol=2)
mat1 <- matrix(1:5, ncol=1)

as.vector(mat1)*mat2
     [,1] [,2]
[1,]    1    6
[2,]    4   14
[3,]    9   24
[4,]   16   36
[5,]   25   50
1 голос
/ 16 марта 2012

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

mat1 * rep(mat2,ncol(mat1))
           [,1]        [,2]
[1,] -0.2327958  0.76093047
[2,] -0.3636661 -0.18991299
[3,] -0.8729468  0.58214118
[4,]  0.8017349 -0.59781909
[5,] -0.2230380 -0.08296606

Если бы mat1 на самом деле содержало столько элементов в строках, сколько mat2 имело в одном столбце (как подсказывают ваши слова), вы бы немного подкорректировали

mat1 <- matrix(rnorm(10), nrow=2, ncol=5)
mat2 <- matrix(rnorm(5), nrow=5, ncol=1)
mat1 * rep(mat2,nrow(mat1))
            [,1]        [,2]       [,3]        [,4]       [,5]
[1,] -0.19818805 -0.05938007 -1.7792597  0.06937307 -0.7193403
[2,] -0.05087793  0.10781853  0.2243285 -0.11416273  2.4063926

или в версии Сары

mat1 <- matrix(rnorm(10), nrow=5, ncol=2)
mat2 <- matrix(rnorm(2), nrow=2, ncol=1)
mat1 * rep(mat2,nrow(mat1))
           [,1]        [,2]
[1,]  0.1528393  0.68646359
[2,]  0.2420454  0.22987250
[3,] -0.2592124 -0.07626098
[4,]  0.4431273  0.27320838
[5,] -0.1698307  0.47578667
...