После того, как вы немного поработали, я все еще боюсь с делениями на ноль в numpy. Я ошеломлен противоречием сообщить сразу:Numpy, деление на ноль: два разных результата для одной и той же операции
from numpy import *
seterr(all='ignore') # Trying to avoid ZeroDivisionError, but unsuccessful.
def f(x) :
return 1./(x-1.)
При этом, когда я исполняю f(1.)
, я получаю ZeroDivisionError: float division by zero
.
Однако, когда я определяю z = array([ 1., 1. ])
и выполнить f(z)
, я не получаю сообщение об ошибке, но array([ inf, inf])
.
Как вы можете видеть, между обоими выходами существует противоречие. My первый вопрос - это почему.
В идеале, я хотел бы получить inf
как вывод f(1.)
, или не менее nan
, но не ошибку (и, следовательно, остановку расчета). Мой второй вопрос - как это сделать. Обратите внимание на мою неудачную попытку, используя seterr
.
Разве это не только, что в первом случае вы воздействующего на целое число , а во втором вы работаете с массивом numpy? Это разные вещи, и поведение будет отличаться в зависимости от того, как операции определены для каждого. Я думаю, что если вам нужен последовательный вывод, вам нужно будет кормить функции согласованных типов ввода или, по крайней мере, типы, которые ведут себя одинаково под операциями. – JCVanHamme