我可以将float128设为numpy中的标准浮动数组吗

19 投票
1 回答
17709 浏览
提问于 2025-04-16 13:57

我在我的数值程序中遇到了一个问题,我想知道这是否是精度问题(也就是四舍五入误差)。有没有什么简单的方法可以把我程序中的所有浮点数组都改成 float128 数组,而不需要逐行去修改代码,反复输入 dtype='float128'。我的数组现在都是 float64,但我并没有明确写 dtype='float64',所以我希望能有办法改变这个默认设置。

1 个回答

19

我觉得没有一个统一的“配置”可以改变这个情况。你可以考虑以下几种方法:

  1. 如果你只是用NumPy的一些工厂函数来创建数组,可以把这些函数换成你自己写的版本。如果你像这样导入这些函数:

    from numpy import empty
    

    那么你只需要这样做:

    from numpy import float128, empty as _empty
    def empty(*args, **kwargs):
        kwargs.update(dtype=float128)
        _empty(*args, **kwargs)
    

    如果你在做:

    import numpy
    

    你可以写一个模块叫做 mynumpy.py

    from numpy import *
    _empty = empty
    def empty(*args, **kwargs):
        kwargs.update(dtype=float128)
        _empty(*args, **kwargs)
    

    然后像这样导入它:

    import mynumpy as numpy
    
  2. 重构你的代码,让它总是使用 dtype=myfloat。这样将来做这样的修改会更简单。你可以结合使用 numpy.empty_like()numpy.zeros_like()numpy.ones_like(),在合适的地方尽量减少实际数据类型的硬编码。

  3. 创建一个 numpy.ndarray 的子类,只用你自定义的构造函数来创建新的数组。

撰写回答