在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
相关产品推荐
相关产品推荐

