Почему NumPy int не является экземпляром Python int, а NumPy float является экземпляром Python? - PullRequest
0 голосов
/ 05 июля 2018

Рассмотрим следующее:

>>> import numbers
>>> import numpy
>>> a = numpy.int_(0)
>>> isinstance(a, int)
False
>>> isinstance(a, numbers.Integral)
True
>>> b = numpy.float_(0)
>>> isinstance(b, float)
True
>>> isinstance(b, numbers.Real)
True

Типы numpy.int_ и numpy.float_ NumPy находятся в числовой абстрактной иерархии базового класса Python , но мне странно, что np.int_ объект не является экземпляром встроенного класса int, тогда как объект np.float_ является экземпляром встроенного типа float.

Почему это так?

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Целые числа Python могут иметь произвольную длину: type(10**1000) по-прежнему int, и при выводе вывести на экран один, а затем тысячу нулей.

Numpy int64 (это то, что int_ на моей машине) - это целые числа, представленные 8 байтами (64 бита), и все, что не может быть представлено. Например, np.int_(10)**1000 даст вам неправильный ответ - но быстро;).

Таким образом, это разные виды чисел; Подклассификация одного под другим имеет такой же смысл, как и подклассы int в float, как я полагаю, думали numpy люди. Лучше держать их отдельно, чтобы никого не смущало то, что было бы неразумно путать их.

Разделение выполнено, потому что целые числа произвольного размера являются медленными, в то время как numpy пытается ускорить вычисления, придерживаясь машинно-дружественных типов.

С другой стороны, с плавающей точкой - это стандартная IEEE с плавающей точкой, как в Python, так и в numpy, поддерживаемая нашими процессорами "из коробки".

0 голосов
/ 05 июля 2018

Поскольку numpy.int_() на самом деле 64-битный, а int может иметь произвольный размер, он использует около 4 дополнительных байтов на каждые 2 ^ 30 битов, которые вы вводите. int64 имеет постоянный размер:

>>> import numpy as np
>>> a = np.int_(0)
>>> type(a)
<type 'numpy.int64'>
>>> b = 0
>>> type(b)
<type 'int'>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...