【问题标题】:Unexpected behavior w/ sum() function带有 sum() 函数的意外行为
【发布时间】:2012-05-07 17:38:03
【问题描述】:

我正在尝试使用以下代码计算 47 x 3 标准化设计矩阵 X 的列总和:

sum(X)

这是X的内容:

X =

   1.0000e+00   1.3001e-01  -2.2368e-01
   1.0000e+00  -5.0419e-01  -2.2368e-01
   1.0000e+00   5.0248e-01  -2.2368e-01
   1.0000e+00  -7.3572e-01  -1.5378e+00
   1.0000e+00   1.2575e+00   1.0904e+00
   1.0000e+00  -1.9732e-02   1.0904e+00
   1.0000e+00  -5.8724e-01  -2.2368e-01
   1.0000e+00  -7.2188e-01  -2.2368e-01
   1.0000e+00  -7.8102e-01  -2.2368e-01
   1.0000e+00  -6.3757e-01  -2.2368e-01
   1.0000e+00  -7.6357e-02   1.0904e+00
   1.0000e+00  -8.5674e-04  -2.2368e-01
   1.0000e+00  -1.3927e-01  -2.2368e-01
   1.0000e+00   3.1173e+00   2.4045e+00
   1.0000e+00  -9.2196e-01  -2.2368e-01
   1.0000e+00   3.7664e-01   1.0904e+00
   1.0000e+00  -8.5652e-01  -1.5378e+00
   1.0000e+00  -9.6222e-01  -2.2368e-01
   1.0000e+00   7.6547e-01   1.0904e+00
   1.0000e+00   1.2965e+00   1.0904e+00
   1.0000e+00  -2.9405e-01  -2.2368e-01
   1.0000e+00  -1.4179e-01  -1.5378e+00
   1.0000e+00  -4.9916e-01  -2.2368e-01
   1.0000e+00  -4.8673e-02   1.0904e+00
   1.0000e+00   2.3774e+00  -2.2368e-01
   1.0000e+00  -1.1334e+00  -2.2368e-01
   1.0000e+00  -6.8287e-01  -2.2368e-01
   1.0000e+00   6.6103e-01  -2.2368e-01
   1.0000e+00   2.5081e-01  -2.2368e-01
   1.0000e+00   8.0070e-01  -2.2368e-01
   1.0000e+00  -2.0345e-01  -1.5378e+00
   1.0000e+00  -1.2592e+00  -2.8519e+00
   1.0000e+00   4.9477e-02   1.0904e+00
   1.0000e+00   1.4299e+00  -2.2368e-01
   1.0000e+00  -2.3868e-01   1.0904e+00
   1.0000e+00  -7.0930e-01  -2.2368e-01
   1.0000e+00  -9.5845e-01  -2.2368e-01
   1.0000e+00   1.6524e-01   1.0904e+00
   1.0000e+00   2.7864e+00   1.0904e+00
   1.0000e+00   2.0299e-01   1.0904e+00
   1.0000e+00  -4.2366e-01  -1.5378e+00
   1.0000e+00   2.9863e-01  -2.2368e-01
   1.0000e+00   7.1262e-01   1.0904e+00
   1.0000e+00  -1.0075e+00  -2.2368e-01
   1.0000e+00  -1.4454e+00  -1.5378e+00
   1.0000e+00  -1.8709e-01   1.0904e+00
   1.0000e+00  -1.0037e+00  -2.2368e-01

总和:

ans =

       4.7000e+01   1.0885e-15   1.2684e-14

第 1 列的总和是正确的,但其他的则相差甚远。有什么想法吗?

【问题讨论】:

  • 您希望后两列的答案是什么?
  • 我得到:47.000000000000000 0.000188260000001 -0.000599999999999
  • 他们在我的评估中是正确的。你的是哪个版本的?
  • @petrichor:我使用的是 Octave 3.2.4
  • 嗯,我的机器上没有安装 Octave。最好的。

标签: matlab octave


【解决方案1】:

第 2 列和第 3 列的总和看起来近似为零。每个元素都是一个浮点值,有时在加减浮点数时会丢失一些精度。您看到的不是零,而是一个非常小的数字(10^-15!)。一个简单的解决方法是将低于某个阈值的所有数字设置为零:

mysum = sum(X);
mysum(mysum < 1e-12) = 0

ans = 

47.0000   0   0 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多