好的,那么我已经实现了accupy,它提供了一些稳定的求和算法。
这里是一个快速而简单的Kahan求和 numpy数组的实现。然而,请注意,对于病态求和,它并不是非常准确。
def kahan_sum(a, axis=0):
'''Kahan summation of the numpy array along an axis.
'''
s = numpy.zeros(a.shape[:axis] + a.shape[axis+1:])
c = numpy.zeros(s.shape)
for i in range(a.shape[axis]):
# https://dev59.com/uaDha4cB1Zd3GeqP8wcd#42817610
y = a[(slice(None),) * axis + (i,)] - c
t = s + y
c = (t - s) - y
s = t.copy()
return s
axis
维度,所以速度较慢。
numpy.sum
或者your_array.sum()
不能满足你的需求? - ForceBrunumpy.sum
不够稳定。我猜它只是一个接一个地添加(小)值,所以最终当大数和小数相加时,信息就会丢失。 - Nico Schlömernumpy.sum
使用成对求和技术,因此优于单纯的求和方法。但是,如果您需要更多的功能,NumPy 不提供该功能。如果您的 NumPy 早于对成对求和技术的改进版本,则更新可能会有所帮助。 - user2357112math.fsum
这样更精确的求和。 - ForceBru