gpt4 book ai didi

python - 我如何知道要使用什么类型的浮子?

转载 作者:行者123 更新时间:2023-11-30 22:09:55 24 4
gpt4 key购买 nike

我的问题是:给定一个 float ,numpy 中保存它的最小类型是什么?考虑以下示例:

dt = datetime.datetime(2018, 8, 1, 17, 32, 53, 966819)
dt_unix = dt.timestamp()
print(dt_unix)
print(np.float32(dt_unix))
print(np.float64(dt_unix))
print(np.finfo(np.float32).precision)

输出为:

1533115973.966819
1533116000.0
1533115973.966819
6

显然,np.float32似乎无法容纳它,但我怎么知道之前呢?毕竟,建议的精度是 6。所以一般来说,特定类型的范围是多少,例如np.float32,以及该类型的真实精度。

最佳答案

整数

np.finfo提供有关数据类型的各种信息。我发现 epsneg 在这里使用起来最方便:它是最小的数字 x,使得 1-x 具有不同于 1 的表示形式。只要 N 和 N-1 ,整数 N 就可以准确表示是不同的。这意味着适合浮点格式的整数上限为1/epsneg:

print(1/np.finfo(np.float16).epsneg)  # 2048
print(1/np.finfo(np.float32).epsneg) # 16777216
print(1/np.finfo(np.float64).epsneg) # 9007199254740992
print(1/np.finfo(np.float128).epsneg) # 18446744073709551616

float

这更加复杂,因为大多数实数(例如 0.1)并不能以 NumPy 具有的任何浮点格式精确表示。我们可以首先尝试最精确的可用格式,然后检查它是否仍然以较小的格式以相同的方式表示。

>>> x = np.float128('0.9764404296875')
>>> np.float64(x) == x
True
>>> np.float32(x) == x
True
>>> np.float16(x) == x
False

所以,这个数字是用float32精确表示的,而不是用float16表示的。

话又说回来,这主要是理论上的,因为如果该数字不是专门为此演示创建的,我们可能每次都会得到 False:所有浮点表示都可能涉及舍入误差。

关于python - 我如何知道要使用什么类型的浮子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51798462/

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