gpt4 book ai didi

python - np.arange 无法按预期使用浮点参数

转载 作者:行者123 更新时间:2023-12-01 08:38:46 24 4
gpt4 key购买 nike

试试这个:

import numpy as np
np.arange(0,3*0.1,0.1)

输出将是: 数组([ 0., 0.1, 0.2, 0.3])

这令人难以置信,因为对于 np.arange 来说,“值是在半开区间 [start, stop) 内生成的”。我尝试了其他数字,发现只有3的倍数才会触发这种现象:

np.arange(0,2*0.1,0.1).shape
# 2
np.arange(0,3*0.1,0.1).shape
# 4
np.arange(0,4*0.1,0.1).shape
# 4
np.arange(0,5*0.1,0.1).shape
# 5
np.arange(0,6*0.1,0.1).shape
# 7

我现在很困惑。有人可以帮助我吗?

最佳答案

问题是你的端点:3 * 0.1,它不被认为等于0.3(请记住Python和NumPy使用floating point arithmetic,其中一些数字,即0.1,无法准确表示)。

>>> 3 * 0.1
0.30000000000000004
>>> 0.3
0.3 # or more exactly 0.299999999999999988897769753748...
>>> 3 * 0.1 == 0.3
False

因此,包含 0.3 并不令人意外,因为端点(稍微)更大。

请注意 numpy.arange还包含结果数组中有多少元素的公式:

ceil((stop - start)/step

>>> (3 * 0.1 - 0)/0.1
3.0000000000000004
>>> ceil(_)
4

float 学很棘手,尤其是在比较 float 是否相等时。为什么不直接创建一个整数数组并通过除法创建所需的 float 组:

>>> import numpy as np
>>> np.arange(0, 3, 1) / 10
array([0. , 0.1, 0.2])

或者numpy.linspace函数为浮点值提供更多选项:

>>> import numpy as np
>>> np.linspace(0.0, 3 * 0.1, 3, endpoint=False)
array([0. , 0.1, 0.2])

关于python - np.arange 无法按预期使用浮点参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53580811/

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