我使用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计算。
答案 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
不开心,我目前不知道,但这似乎有效。