Умножение двух матриц в R вручную - PullRequest
1 голос
/ 24 апреля 2019

Я использую R v 3.0.0 (2013-04-03) и RStudio v 1.1.463 в 64-битной Win-7.

В следующем исходном коде:

# Problem 1 - Matrix powers in R
#
# R does not have a built-in command for taking matrix powers. 
# Write a function matrixpower with two arguments mat and k that 
# will take integer powers k of a matrix mat.
matrixMul <- function(mat1)
{
  rows <- nrow(mat1)
  cols <- ncol(mat1)

  matOut = matrix(nrow = rows, ncol = cols) # empty matrix

  for (i in 1:rows) 
  {
    for(j in 1:cols)
    {
      vec1 <- mat1[i,]
      vec2 <- mat1[,j]

      mult1 <- vec1 * vec2

      matOut[i,j] <- mult1
    }
  }

  return(matOut) 
}

mat1 <- matrix(c(1,2,3,4), nrow = 2, ncol=2)    
power1 <- matrixMul(mat1)

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

7    10
15   22

Но я получаю следующий вывод:

3    12
6    16

Что я здесь не так делаю?

Это эффективный способ сделатьумножение

Ответы [ 2 ]

1 голос
/ 24 апреля 2019

В своем коде вы забыли суммировать свой продукт. Должно быть

mult1 <- sum(vec1 * vec2)

Возможно, в вашей версии R в противном случае просто присваивается первый элемент вектора.

0 голосов
/ 24 апреля 2019

Хорошо.Я нашел решение.

matrixMul <- function(mat1)
{
  rows <- nrow(mat1)
  cols <- ncol(mat1)

  matOut <- matrix(nrow = rows, ncol = cols) # empty matrix

  for (i in 1:rows) 
  {
    for(j in 1:cols)
    {
      vec1 <- mat1[i,]
      vec2 <- mat1[,j]

      mult1 <- vec1 * vec2

      matOut[i,j] <- sum(mult1)
    }
  }

  return(matOut) 
}


mat1 <- matrix(c(1,2,3,4), nrow = 2, ncol=2)
mult1 <- matrixMul(mat1)
mult1
...