我是 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]
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