Изменение поведения с плавающей запятой в Python на стиль Numpy - PullRequest
2 голосов
/ 01 июня 2010

Есть ли способ заставить числа Python с плавающей запятой следовать правилам numpy относительно +/- Inf и NaN? Например, сделать 1.0/0.0 = Inf.

>>> from numpy import *
>>> ones(1)/0
array([ Inf])
>>> 1.0/0.0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: float division

Функция деления Numpy divide(1.0,0.0)=Inf однако не ясно, может ли она использоваться аналогично from __future__ import division.

Ответы [ 3 ]

1 голос
/ 02 июня 2010

Вы должны взглянуть на то, как Мудрец делает это. IIRC они оборачивают Python REPL в свой собственный препроцессор.

1 голос
/ 01 июня 2010

Я пытался сделать что-то подобное, и я так и не понял, как это сделать красиво. Но я могу сказать вам несколько вещей, которые я пробовал, но это не сработало:

  1. Установка float = numpy.float - python по-прежнему использует старый float
  2. пытается изменить число с плавающей точкой. div на пользовательскую функцию - "TypeError: невозможно установить атрибуты типа встроенного / расширения float" Кроме того, python не любит, когда вы копаетесь с объектом dict во встроенных объектах.

Я решил пойти и изменить реальный исходный код cpython, чтобы он делал то, что я хотел, что, очевидно, не практично, но это сработало.

Я думаю, что причина, по которой нечто подобное невозможно, заключается в том, что float / int / list реализованы в C в фоновом режиме, и их поведение нельзя изменить изнутри языка.

0 голосов
/ 01 июня 2010

Вы можете обернуть все свои поплавки в numpy.float64, который является типом numpy float.

a = float64(1.)
a/0 # Inf

На самом деле, вам, очевидно, нужно только обернуть поплавки слева от арифметических операций.

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