为什么Pyinterval算法会因numpy.float64而失败

时间:2018-01-23 07:55:03

标签: python numpy intervals

我使用Pyinterval,由于某种原因,它与numpy.float64不太合适。基本上,每当在区间运算中使用numpy.float64而不是通常的float时,间隔就会被转换为numpy数组。

以下示例:

import interval as itv
import numpy as np
from math import sqrt

ival = itv.interval([1,2])
cons = 2

print("interval 1: ",sqrt(cons)*ival)
print("interval 2: ",np.sqrt(cons)*ival)

打印:

  

间隔1:间隔([1.4142135623730951,2.8284271247461903])

     

间隔2:[[1.41421356 2.82842712]]

并且相应的类型。基本上,因为我使用numpy很多,我的问题是,如果我能以某种方式强制它永远不会使用自己的float64类型,或者除了每次之后还有任何其他方便的解决方案numpy计算。

1 个答案:

答案 0 :(得分:1)

这可能是由于numpy试图将间隔转换为它知道如何乘以的东西。这显然是失败的。相反,您可以让间隔库执行转换,这似乎在我的测试中起作用:

代码:

ival = itv.interval([1, 2])
cons = 2

print("interval 1: ", ival * sqrt(cons))
print("interval 2: ", ival * np.sqrt(cons))

结果:

('interval 1: ', interval([1.4142135623730951, 2.8284271247461903]))
('interval 2: ', interval([1.4142135623730951, 2.8284271247461903]))

但为什么?

Python使用* dunder实现__mul__运算符。被叫的dunder是左手操作数的dunder。通过将间隔放在左侧,您将使用其转换,而不是numpy的转换。为什么numpy不开心,我目前不知道,但这似乎有效。