gpt4 book ai didi

python - 不同的 linspaces 或 range 都包含精​​确的 0.0

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

生成两个从负下限到正上限的 linspace 范围(两者都包含 0.0 作为精确值)是否容易?

这是一个失败的例子:

>>> r1=np.arange(-.3,.6,.1)
>>> r2=np.arange(-.5,.5,.1)
>>> r1
array([ -3.00000000e-01, -2.00000000e-01, -1.00000000e-01,
5.55111512e-17, 1.00000000e-01, 2.00000000e-01,
3.00000000e-01, 4.00000000e-01, 5.00000000e-01])
>>> r2
array([ -5.00000000e-01, -4.00000000e-01, -3.00000000e-01,
-2.00000000e-01, -1.00000000e-01, -1.11022302e-16,
1.00000000e-01, 2.00000000e-01, 3.00000000e-01,
4.00000000e-01])
>>> r1[3]
5.5511151231257827e-17
>>> r2[5]
-1.1102230246251565e-16

我希望 r1[3] 和 r2[5] 恰好为 0.0(假设 IEEE-754)。我能看到的唯一解决方法是生成范围 [-x0,0[,然后附加 [0,x1]。有没有更好、更容易阅读的方法?

最佳答案

您可以生成一个整数范围并乘以任何比例因子:

r1 = np.arange(-3, 6) * 0.1

或者为了获得更高的精度(尽管它不会影响 0),可以通过除以精确值 10.0 而不是乘以不精确值 0.1 来避免舍入步骤:

r1 = np.arange(-3, 6) / 10.0

arange 与浮点参数一起使用通常是一个坏主意。通常使用 numpy.linspace 更好,但如果您需要恰好 0 作为元素之一,linspace 就无法做出足够强的 promise :

>>> numpy.linspace(-2, 1, 148)[::49]
array([-2.00000000e+00, -1.00000000e+00, -2.22044605e-16, 1.00000000e+00])
>>> (numpy.arange(-2*49, 50) / 49)[::49]
array([-2., -1., 0., 1.])

关于python - 不同的 linspaces 或 range 都包含精​​确的 0.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53218055/

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