有两个矩阵,A和B:
它们的乘积是 C=AB:
现在我想编写一个带有循环的函数,它返回产品 C。当两个矩阵的维度不兼容时,它应该返回错误。并且该函数应包含两个矩阵 A 和 B
我从来没有用矩阵写过函数,所以我很感谢你的帮助!
非常感谢你的帮助!现在另一个问题,如果给出
仍然可以使用循环吗?
有两个矩阵,A和B:
它们的乘积是 C=AB:
现在我想编写一个带有循环的函数,它返回产品 C。当两个矩阵的维度不兼容时,它应该返回错误。并且该函数应包含两个矩阵 A 和 B
我从来没有用矩阵写过函数,所以我很感谢你的帮助!
非常感谢你的帮助!现在另一个问题,如果给出
仍然可以使用循环吗?
这是根据您如何标记 Q 的 R 版本:
multmat <- function(m1, m2) {
if(!isTRUE(all.equal(dim(m1), dim(m2))))
stop("Dimensions of matrices don't match.")
m1 * m2
}
执行乘法的函数已经为您完成,它是*
,但是如果您想要检查,那么您需要一个包装器,如上图所示。在 R 中,您不想通过循环来执行此操作。
这给
m1 <- matrix(1:9, ncol = 3)
m2 <- matrix(1:9, ncol = 3)
multmat(m1, m2)
> multmat(m1, m2)
[,1] [,2] [,3]
[1,] 1 16 49
[2,] 4 25 64
[3,] 9 36 81
m3 <- matrix(1:12, ncol = 3)
multmat(m1, m3)
> multmat(m1, m3)
Error in multmat(m1, m3) : Dimensions of matrices don't match.
对于添加新问题的编辑,%*%
操作员将给出矩阵乘法。例如
> m1 %*% m2
[,1] [,2] [,3]
[1,] 30 66 102
[2,] 36 81 126
[3,] 42 96 150
当然,现在对尺寸匹配的限制和*
上面的情况不同,如下图
> m1 %*% m3
Error in m1 %*% m3 : non-conformable arguments
> m1 %*% t(m3) ## transpose of m3
[,1] [,2] [,3] [,4]
[1,] 84 96 108 120
[2,] 99 114 129 144
[3,] 114 132 150 168
使用转置的操作m3
有效,因为它现在有尽可能多的行和m1
列。