Как заставить NumPy всегда использовать точность (float32, float64 ...)? - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь изучить небольшой пример FIR, написанный на Python.См. https://scipy -cookbook.readthedocs.io / items / FIRFilter.html

Моя цель - изучить, как изменяется точность вывода для каждого float16, float32 и float64(доступно в NumPy).Поэтому для первого случая мне нужно, чтобы все мои вычисления выполнялись только в float16.Дело в том, что я должен каждый раз приводить данные, чтобы убедиться, что я использую правильный формат.Существует ли метод последовательного использования единого контекста для всех вычислений, т.е. для выполнения всех вычислений (сложения, вычитания, cos, sin ... и т. Д.) С использованием float16, например, без переписывания кода с приведением типов?

1 Ответ

1 голос
/ 06 марта 2019

Из базовых numpy :

При работе с массивами разных типов тип результирующего массива соответствует более общему или точному (поведение, известное какupcasting).

Вы можете определить тип данных при создании массива.Применяя сумму, умножение или вычитание, результат будет преобразован в «больший» тип, он также сохранит dtype, если вы выполните операции с массивом, например:

x = np.ones(10, dtype=np.float16)
y = np.ones(10, dtype=np.float32)
print((x + y).dtype, (x - y).dtype, (x * y).dtype)
print(np.sin(x).dtype, np.sin(y).dtype)
>> float32 float32 float32
   float16 float32

Исключение составляет передача целого числа.в этом случае по умолчанию numpy повышается до float64

print(np.sin(np.ones(10, dtype=int)).dtype)
>> float64
...