You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在NumPy中对C连续数组求和返回错误结果的求助

浮点求和精度问题求助

我有如下NumPy数组:

import numpy as np

values = np.array(
    [[0.00000000000000000000000e+00,
      0.00000000000000000000000e+00],
     [-4.79999759999999625000000e+14,
      -0.00000000000000000000000e+00],
     [4.79999759999999625000000e+14,
      -0.00000000000000000000000e+00],
     [-0.00000000000000000000000e+00,
      -4.79999759999999625000000e+14],
     [-3.74998499999999072265625e+12,
      -3.74998499999999072265625e+12],
     [3.74998499999999072265625e+12,
      -3.74998499999999072265625e+12],
     [-0.00000000000000000000000e+00,
      4.79999759999999625000000e+14],
     [-3.74998499999999072265625e+12,
      3.74998499999999072265625e+12],
     [3.74998499999999072265625e+12,
      3.74998499999999072265625e+12]]
)

数组包含0、4.79999759999999625e+14、3.74998499999999072265625e+12及其负值。执行print(np.sum(values, axis=0))本应得到[0. 0.](或极小值),但实际结果为[ 0. -0.01855469]。

我认为这是浮点精度错误,推测NumPy无法进行成对求和,于是尝试转置数组后求和:

values_T = np.array(
    [[0.000000000000000000000000e+00,
      -4.799997599999996250000000e+14,
      4.799997599999996250000000e+14,
      -0.000000000000000000000000e+00,
      -3.749984999999990722656250e+12,
      3.749984999999990722656250e+12,
      -0.000000000000000000000000e+00,
      -3.749984999999990722656250e+12,
      3.749984999999990722656250e+12],
     [0.000000000000000000000000e+00,
      -0.000000000000000000000000e+00,
      -0.000000000000000000000000e+00,
      -4.799997599999996250000000e+14,
      -3.749984999999990722656250e+12,
      -3.749984999999990722656250e+12,
      4.799997599999996250000000e+14,
      3.749984999999990722656250e+12,
      3.749984999999990722656250e+12]]
)

print(np.sum(values_T, axis=1))

执行后得到[ 0. -0.00927734],错误值减半但仍不正确。经np.ndarray.flags验证,两个数组均为C连续数组,求解决办法!


内容的提问来源于stack exchange,提问作者ikhebgeenaccount

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 21:52:53