gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:50:44 25 4
gpt4 key购买 nike

我使用 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)

打印:

interval 1: interval([1.4142135623730951, 2.8284271247461903])

interval 2: [[ 1.41421356 2.82842712]]

相应的类型。基本上,因为我经常使用 numpy,我的问题是我是否可以以某种方式强制它永远不使用它自己的 float64 类型,或者除了转换之外是否还有其他方便的解决方案每次 numpy 计算后返回。

最佳答案

这可能是由于 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 使用 __mul__ 双下划线实现 * 运算符。被调用的 dunder 是用于左手操作数的 dunder。通过将间隔放在左侧,您将使用它的转换,而不是 numpy 的转换。为什么 numpy 不开心,我目前不知道,但这似乎有效。

关于python - 为什么 Pyinterval 算法会因 numpy.float64 而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48396694/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com