为什么NumPy int不是Python int的实例,而NumPy float是Python float的实例?

Art*_*rin 7 python types numpy

考虑以下:

>>> 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
Run Code Online (Sandbox Code Playgroud)

NumPy numpy.int_numpy.float_类型都在Python的数字抽象基类层次结构中,但我很奇怪,np.int_对象不是内置int类的实例,而np.float_对象内置float类型的实例.

为什么会这样?

Ama*_*dan 10

Python整数可以是任意长度:type(10**1000)仍然是int,并且如果输出它将在屏幕上打印出一个然后一千个零.

Numpy int64(这是int_我机器上的内容)是由8个字节(64位)表示的整数,并且无法表示任何内容.例如,np.int_(10)**1000会给你一个错误的答案 - 但很快;).

因此,它们是不同种类的数字; 继承一个在另一个之下使得与在子int下的子类化一样有意义float,这是我认为numpy人们的想法.最好将它们分开,这样就没有人对混淆它们是不明智的事实感到困惑.

完成拆分是因为任意大小的整数很慢,同时numpy试图通过坚持机器友好类型来加速计算.

另一方面,浮点数是标准的IEEE浮点数,无论是在Python还是在内,numpy都由我们的处理器支持开箱即用.