python - numpy.arrays 的 fsum,稳定求和

标签 python arrays numpy

我有许多具有小值的多维 numpy.array 我需要加上一点数字错误。对于 float,有 math.fsum (及其实现 here ),这一直对我很有帮助。 numpy.sum不够稳定。

如何获得 numpy.array 的稳定求和?


背景

这是给 the quadpy package 的.小值数组是函数在(许多)间隔的特定点乘以它们的权重的评估。这些的总和是所述函数在区间内的积分的近似值。

最佳答案

好吧,我已经实现了 accupy给出了一些稳定的求和算法。

这是 Kahan summation 的一个快速而肮脏的实现对于 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://stackoverflow.com/a/42817610/353337
        y = a[(slice(None),) * axis + (i,)] - c
        t = s + y
        c = (t - s) - y
        s = t.copy()
    return s

它完成了工作,但速度很慢,因为它是在第 axis 维度上进行 Python 循环。

关于python - numpy.arrays 的 fsum,稳定求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42816678/

相关文章:

python - 在pycharm中调试python代码

python - 具有按组着色的图例的散点图,无需多次调用 plt.scatter

python - Django 1.7 makemigrations 将表重命名为 None

c++ - 从 Python 调用 C++ opencv 函数(将 cv::Mat 发送到使用 opencv 的 C++ dll)

javascript - 在 forEach 循环中等待 promise

javascript - 根据参数更新数组中的值

python - np.nditer 引用类型的返回类型

c++ - 如何在c++中打印n维数组

python - 可变距离的高效 NumPy 行旋转

python - Numpy C-Api 将顺序从列更改为行