将Python中的浮点行为更改为Numpy样式

将Python中的浮点行为更改为Numpy样式,python,numpy,Python,Numpy,有没有办法让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: f

有没有办法让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导入的
>>*
>>>一(1)/0
数组([Inf])
>>> 1.0/0.0
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
零除法错误:浮点除法

Numpy的divide函数divide(1.0,0.0)=Inf,但是不清楚它是否可以类似于来自未来的导入divide的
。我尝试过做类似的事情,但我从来没有想过如何做得很好。但是,我可以告诉你一些我尝试过但没有成功的事情:

  • 设置float=numpy.float——python仍然使用旧的float
  • 正在尝试将float.div更改为用户定义的函数--“TypeError:无法设置内置/扩展类型的属性
    float
    ”。另外,python不喜欢在内置对象中混用dict对象
  • 我决定修改实际的cpython源代码,让它做我想做的事情,这显然是不实际的,但它成功了


    我认为这样做不可能的原因是float/int/list是在后台用C实现的,它们的行为不能从语言内部完全改变。

    您可以将所有的float封装在
    numpy.float64
    中,这是numpy float类型

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

    事实上,很明显,您只需要在算术运算的左侧包装浮点。

    您应该看看它是如何实现的。IIRC他们将Python REPL封装在自己的预处理器中。

    我试图在REPL外壳中提供类似numpy的浮点运算,因此显式封装不是一个选项。