将Python中的浮点行为更改为Numpy样式
有没有办法让Python浮点数遵循numpy关于+/-Inf和NaN的规则?例如,使将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
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的浮点运算,因此显式封装不是一个选项。