Могу ли я установить float128 в качестве стандартного массива float в numpy - PullRequest
15 голосов
/ 18 марта 2011

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

1 Ответ

16 голосов
/ 18 марта 2011

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

  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 и используйте только свои собственные конструкторы для создания новых массивов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...