R中的矩阵乘法,奇怪的结果
在检查一些矩阵乘法运算时,我遇到了一个奇怪的行为。当我“手动”执行乘法(使用乘积和和)和使用矩阵乘法运算符%*%时,我得到了不同的结果R中的矩阵乘法,奇怪的结果,r,matrix-multiplication,R,Matrix Multiplication,在检查一些矩阵乘法运算时,我遇到了一个奇怪的行为。当我“手动”执行乘法(使用乘积和和)和使用矩阵乘法运算符%*%时,我得到了不同的结果 c <- 1:10 a <- 100^(0:9) p1 <- sum(a*c) p2 <- a%*%c p1==p2 [,1] [1,] FALSE p1-p2 [,1] [1,] -2048 c%*%计算结果的方式略有不同,这意味着不同位置会出现不同的舍入误差,从而导致不同的总体结果 我只是猜测,但我相信这可能
c <- 1:10
a <- 100^(0:9)
p1 <- sum(a*c)
p2 <- a%*%c
p1==p2
[,1]
[1,] FALSE
p1-p2
[,1]
[1,] -2048
c%*%
计算结果的方式略有不同,这意味着不同位置会出现不同的舍入误差,从而导致不同的总体结果
我只是猜测,但我相信这可能是由于sum
将其累加器保存在一个机器浮点寄存器中,这在英特尔体系结构上是很常见的。如果您想确定,您必须查看R的装配代码。请参阅。使用all.equal
测试相等性。虽然这是R-FAQ中的一个问题,因为它实际上是一个“新手计算机数学”FAQ,但是否有什么地方可以让我们放置答案?“任何其他值”都不一定可以。尝试f如果您要走这条路线,您可以将数据转换为mpfr
类(请参阅Rmpfr
包)。
c <- 1:10
a <- 101^(0:9)
p1 <- sum(a*c)
p2 <- a%*%c
p1==p2
[,1]
[1,] TRUE
p1-p2
[,1]
[1,] 0