Могу ли я установить float128 в качестве стандартного флота-массива в numpy

Итак, у меня проблема с моей числовой программой, и мне любопытно, является ли это проблемой точности (т.е. ошибка округления). Есть ли быстрый способ изменить все массивы с плавающей запятой в моей программе в массивы float128, не просматривая мой код и не набирая dtype = 'float128' повсюду. Мои массивы - все float64, но я никогда явно не писал dtype = 'float64', поэтому я надеялся, что есть способ изменить это поведение по умолчанию.

Ответы

Ответ 1

Я не думаю, что есть центральная "конфигурация", которую вы могли бы изменить, чтобы достичь этого. Некоторые варианты, что вы могли бы сделать:

  • Если вы создаете массивы только очень немногими функциями NumPy factory, замените эти функции на свои собственные версии. Если вы импортируете эти функции, например

    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
    
  • Реорганируйте свой код, чтобы всегда использовать dtype=myfloat. Это облегчит такие изменения в будущем. Вы можете комбинировать этот подход с использованием numpy.empty_like(), numpy.zeros_like() и numpy.ones_like(), где это необходимо, чтобы иметь реальный тип данных, закодированный как можно меньше мест.

  • Подкласс numpy.ndarray и используйте только ваши собственные конструкторы для создания новых массивов.