gpt4 book ai didi

python - 除以大整数时,Numpy 转换为 python float,这是一个错误吗?

转载 作者:行者123 更新时间:2023-12-04 12:28:27 25 4
gpt4 key购买 nike

这是一个最小的代码示例:

import numpy as np

x = np.array(1e-35, dtype=np.double)
y = int(1e19)
print( type(x/y) )

y = int(1e20)
print( type(x/y) )
在前一种情况下,在我的机器上打印 numpy.float64 ,在后一种情况下,它打印 float .我想具体数字会在不同的机器上有所不同,但重点是对于小整数,除法保留类型,而对于大整数,类型被转换为 Python 浮点数。我想知道这是否是 Numpy 中的错误,以及除了手动将所有内容转换为 double 之外是否还有其他解决方案。
看起来无害,但是当我尝试写一个 ufunc 时并且强制转换只发生在数组的某些元素上,返回类型变为 object ,并且程序抛出“无法强制提供输出参数”错误。

最佳答案

输出类型更改是因为 int(1e19)可以安全地转换到 np.int64int(1e20)无法放入 np.int64因此不能安全地转换(您可以使用 y.bit_length() 进行检查)。结果,y首先保留为纯 Python 对象(一个可变大小的整数),然后 Python 将其转换为纯 Python 浮点对象,因此结果也是纯 Python 浮点对象。发生这种情况是因为 Numpy 尝试根据 native 类型应用自己的语义规则。当它不能使用它们时(由于不安全/不可能的强制转换),应用了后备纯 Python 基于对象的语义 产生纯 Python 对象。尽管如此,这似乎是一个 known issue .您可以在 GitHub 上查看相关问题并与 Numpy 开发人员讨论以获取更多信息。
我认为最好的策略是不要依赖这种行为。事实上,当一个类似浮点数的值乘以一个巨大的整数时,这个巨大的整数总是首先被转换为一个类似浮点数的值(因为语义规则)。此转换可能会导致精度损失以及以下乘法。因此,我认为最好自己转换巨大的整数,以记住整数值可能无法完美表示。

关于python - 除以大整数时,Numpy 转换为 python float,这是一个错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68606023/

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