我可以将float128设置为numpy中的标准float数组

Esk*_*kil 15 python types numpy

所以我的数字程序有问题,我很好奇它是否是精度问题(即舍入错误).有没有一种快速的方法可以将程序中的所有浮点数组更改为float128数组,而无需通过我的代码并dtype='float128'在整个地方键入内容.我的数组都是float64,但我从未明确写过dtype='float64',所以我希望有一种方法可以改变这种默认行为.

Sve*_*ach 16

我不认为你可以改变一个中心"配置"来实现这一目标.一些选项你可以做什么:

  1. 如果您只使用NumPy的很少的工厂函数创建数组,请用您自己的版本替换这些函数.如果您导入这些功能,如

    from numpy import empty
    
    Run Code Online (Sandbox Code Playgroud)

    你可以这样做

    from numpy import float128, empty as _empty
    def empty(*args, **kwargs):
        kwargs.update(dtype=float128)
        _empty(*args, **kwargs)
    
    Run Code Online (Sandbox Code Playgroud)

    如果你在做

    import numpy
    
    Run Code Online (Sandbox Code Playgroud)

    你可以写一个模块 mynumpy.py

    from numpy import *
    _empty = empty
    def empty(*args, **kwargs):
        kwargs.update(dtype=float128)
        _empty(*args, **kwargs)
    
    Run Code Online (Sandbox Code Playgroud)

    并导入它

    import mynumpy as numpy
    
    Run Code Online (Sandbox Code Playgroud)
  2. 重构您的代码以始终使用dtype=myfloat.这将使这些变化在未来变得容易.您可以将此方法与使用方法相结合numpy.empty_like(),numpy.zeros_like()numpy.ones_like()在适当的位置将实际数据类型硬编码在尽可能少的位置.

  3. 子类numpy.ndarray,仅使用自定义构造函数创建新数组.

  • 按顺序尝试这些可能是最好的:1-2-3。最后一个选项(子类化`numpy.ndarray`)很优雅,但也有陷阱。例如,我不小心将数组的切片存储为属性,即“self.myslice = self[0, :]”,从而破坏了数组垃圾回收。随着我执行越来越多的操作,我的内存会慢慢填满。 (2认同)