R 中的简单矩阵乘法 - 长度问题

问题描述 投票:0回答:1

我是 R 新手,正在尝试做一些简单的矩阵乘法。好像有尺寸问题。请参阅下面我的代码。 y = [30, 30, 30] 的输出,仅包含第一行第一列计算的正确答案。具体错误信息为:

在 ans[i] <- ans[i] + vec[j] * mat[j:i] : number of items to replace is not a multiple of replacement length

我是编程初学者,希望能从这里得到一些帮助。非常感谢您。

MyMatMult = function(vec, mat){
  ans = vector(mode = "numeric", length = 3)
  
  for (i in 1:ncol(mat)){
    for (j in 1:nrow(mat)){
      ans[i] = ans[i] + vec[j] * mat[j:i]
    }
  }
  
  return(ans)
}

vec = matrix(data = 1:3,nrow = 1,ncol = 3)
mat = matrix(data = 1:9,nrow = 3,ncol = 3,byrow = T)


y = MyMatMult(vec,mat)
print(y)

期望的输出应该是[30,36,42]

r matrix-multiplication
1个回答
0
投票

j:i
是从
j
i
的序列。要索引矩阵的行和列,您需要
mat[j, i]
而不是
mat[j:i]

纠正这个错别字:

MyMatMult = function(vec, mat){
  ans = vector(mode = "numeric", length = 3)
  
  for (i in 1:ncol(mat)){
    for (j in 1:nrow(mat)){
      ans[i] = ans[i] + vec[j] * mat[j, i]
    }
  }
  
  return(ans)
}

vec = matrix(data = 1:3,nrow = 1,ncol = 3)
mat = matrix(data = 1:9,nrow = 3,ncol = 3,byrow = T)

MyMatMult(vec,mat)
# [1] 30 36 42
© www.soinside.com 2019 - 2024. All rights reserved.