Dav*_*olt 4 python precision numpy
我有一个大矩阵,其数值在数量级上变化很大.为了尽可能精确地计算总和,我的方法是将ndarray重新整形为一维数组,对其进行排序,然后将其添加起来,从最小的条目开始.有没有更好/更有效的方法来做到这一点?
我认为,鉴于浮点精度问题,最常见的算法是Kahan求和.出于实际目的,Kahan求和具有与加数的数量无关的误差界限,而朴素求和具有与加数的数量线性增长的误差界限.
NumPy不使用Kahan求和,没有大的性能权衡,没有简单的方法来实现它.但是在一些合理的假设下,它使用了下一个最好的事情,即成对求和,其中误差增加,例如求和数的对数的平方根.
因此,Numpy很可能已经能够为您的问题提供足够高的精度.为了验证这一点,我实际上会通过Kahan求和运行一些示例案例(上面维基百科链接中的伪代码可以简单地转换为Python),并将其作为黄金,最佳结果,并将其与以下内容进行比较:
np.sum按原样调用矩阵.np.sum重塑为1D后调用矩阵,如果矩阵在内存中不连续,可能会产生更好的结果.np.sum1D阵列的排序版本.对于大多数情况,这最后三个选项应该表现相似,但唯一知道的方法是实际测试它.
| 归档时间: |
|
| 查看次数: |
113 次 |
| 最近记录: |