为什么逐元素矩阵乘法为 R 中的相同数字提供不同的输出?
Why element-wise matrix multiplication giving different output for same numbers in R?
考虑以下矩阵 A 和 B。
> A
[,1] [,2] [,3]
[1,] 76.66894 76.46920 76.38535
[2,] 76.66894 76.48072 76.40349
[3,] 76.66894 76.56698 77.22777
[4,] 76.66894 76.46920 76.38535
[5,] 76.66894 76.48072 76.40349
[6,] 76.66894 76.56698 77.22777
[7,] 76.66894 76.46920 76.38535
[8,] 76.66894 76.48072 76.40349
[9,] 76.66894 76.56698 77.22777
> B
[,1] [,2] [,3]
[1,] 0.1111111 0.1111111 0.1111111
[2,] 0.1111111 0.1111111 0.1111111
[3,] 0.1111111 0.1111111 0.1111111
[4,] 0.1111111 0.1111111 0.1111111
[5,] 0.1111112 0.1111112 0.1111112
[6,] 0.1111111 0.1111111 0.1111111
[7,] 0.1111111 0.1111111 0.1111111
[8,] 0.1111111 0.1111111 0.1111111
[9,] 0.1111111 0.1111111 0.1111111
我想对 A 和 B 进行逐元素乘法运算,我希望第一列中的所有结果都相同,但第 5 个除外,因为它会乘以稍高的数字。但是,我得到以下结果:
C <- A*B
> C
[,1] [,2] [,3]
[1,] 8.518769 8.496576 8.487259
[2,] 8.518772 8.497859 8.489277
[3,] 8.518769 8.507440 8.580862
[4,] 8.518772 8.496579 8.487262
[5,] 8.518775 8.497861 8.489280
[6,] 8.518772 8.507443 8.580865
[7,] 8.518769 8.496576 8.487259
[8,] 8.518772 8.497859 8.489277
[9,] 8.518769 8.507440 8.580862
即使将相同的值相乘,我得到的值也略有不同。为什么会这样?
这些是浮点数,所以必须有更高的精度,而不仅仅是打印的数字,并且可以作为乘法的差异加起来,即
print(B[5,] - A[5, ], digits = 16)
会有所不同
考虑以下矩阵 A 和 B。
> A
[,1] [,2] [,3]
[1,] 76.66894 76.46920 76.38535
[2,] 76.66894 76.48072 76.40349
[3,] 76.66894 76.56698 77.22777
[4,] 76.66894 76.46920 76.38535
[5,] 76.66894 76.48072 76.40349
[6,] 76.66894 76.56698 77.22777
[7,] 76.66894 76.46920 76.38535
[8,] 76.66894 76.48072 76.40349
[9,] 76.66894 76.56698 77.22777
> B
[,1] [,2] [,3]
[1,] 0.1111111 0.1111111 0.1111111
[2,] 0.1111111 0.1111111 0.1111111
[3,] 0.1111111 0.1111111 0.1111111
[4,] 0.1111111 0.1111111 0.1111111
[5,] 0.1111112 0.1111112 0.1111112
[6,] 0.1111111 0.1111111 0.1111111
[7,] 0.1111111 0.1111111 0.1111111
[8,] 0.1111111 0.1111111 0.1111111
[9,] 0.1111111 0.1111111 0.1111111
我想对 A 和 B 进行逐元素乘法运算,我希望第一列中的所有结果都相同,但第 5 个除外,因为它会乘以稍高的数字。但是,我得到以下结果:
C <- A*B
> C
[,1] [,2] [,3]
[1,] 8.518769 8.496576 8.487259
[2,] 8.518772 8.497859 8.489277
[3,] 8.518769 8.507440 8.580862
[4,] 8.518772 8.496579 8.487262
[5,] 8.518775 8.497861 8.489280
[6,] 8.518772 8.507443 8.580865
[7,] 8.518769 8.496576 8.487259
[8,] 8.518772 8.497859 8.489277
[9,] 8.518769 8.507440 8.580862
即使将相同的值相乘,我得到的值也略有不同。为什么会这样?
这些是浮点数,所以必须有更高的精度,而不仅仅是打印的数字,并且可以作为乘法的差异加起来,即
print(B[5,] - A[5, ], digits = 16)
会有所不同