np.arange输出结果异常

使用np.arange,终点值应该不被输出,但是如图所示:

import numpy as np
M = np.arange(0.91, 0.93, 0.01)
print(M)

img

import numpy as np
M = np.arange(0.91, 0.99, 0.02)
print(M)

img

终点值0.99又没有被输出,很奇怪的问题,不太懂为啥。

import numpy as np
M = np.arange(0.91, 0.99, 0.01)
print(M)

img

但是有的组合就是会出现问题:

import numpy as np
M = np.arange(99.91, 99.93, 0.01)
print(M)

99.93又被输出:

img

感觉很奇怪的问题

该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
np.arange 函数用于生成一个等差数列,左闭右开区间,即终点值通常不会被包含在内。但是由于浮点数的精度问题,有时候会出现终点值被包含在内的情况。

在第一个例子中,使用 np.arange(0.91, 0.93, 0.01) 生成的等差数列应该是 [0.91, 0.92],但是由于浮点数的精度问题,0.92 这个数可能会被表示成 0.9199999999999999,从而导致 0.93 也被包含在内。这就是为什么 0.93 会被输出的原因。

在第二个例子中,使用 np.arange(0.91, 0.99, 0.02) 生成的等差数列应该是 [0.91, 0.93, 0.95, 0.97],这个结果是正确的,因为终点值 0.99 不会被包含在内。

在第三个例子中,使用 np.arange(0.91, 0.99, 0.01) 生成的等差数列应该是 [0.91, 0.92, 0.93, ..., 0.98],但是由于浮点数的精度问题,0.98 这个数可能会被表示成 0.9799999999999999,从而导致 0.99 也被包含在内。这就是为什么 0.99 会被输出的原因。

在第四个例子中,使用 np.arange(99.91, 99.93, 0.01) 生成的等差数列应该是 [99.91, 99.92],但是由于浮点数的精度问题,99.92 这个数可能会被表示成 99.91999999999999,从而导致 99.93 也被包含在内。这就是为什么 99.93 会被输出的原因。

为了避免这种精度问题,可以使用 np.linspace 函数代替 np.arange 函数,它可以生成指定数量的等分数列,可以避免出现终点值被包含的问题。例如,可以使用 np.linspace(0.91, 0.93, 3) 生成 [0.91, 0.92, 0.93],这样可以确保终点值不会被包含在内。


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/697367
  • 除此之外, 这篇博客: np.arange函数的使用中的 np.arange函数的使用 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

  • 返回值: np.arange()函数返回一个序列
    参数: 有三种情况

    • 1.只有一个参数的时候,默认从0开始到输入的参数,产生序列,步进为默认的1
    • 2.有两个参数的时候,序列中的元素从第一个参数到第二个参数的区间产生,步进为默认的1
    • 3.有三个参数的时候,序列中的元素从第一个参数到第二个参数的区间产生,步进为第三个参数

    ps:这里第三个参数可以是小数

    代码示例:
    三个参数:

    z=np.arange(-7,7,0.2)
    
    [ -7.00000000e+00  -6.80000000e+00  -6.60000000e+00  -6.40000000e+00
      -6.20000000e+00  -6.00000000e+00  -5.80000000e+00  -5.60000000e+00
      -5.40000000e+00  -5.20000000e+00  -5.00000000e+00  -4.80000000e+00
      -4.60000000e+00  -4.40000000e+00  -4.20000000e+00  -4.00000000e+00
      -3.80000000e+00  -3.60000000e+00  -3.40000000e+00  -3.20000000e+00
      -3.00000000e+00  -2.80000000e+00  -2.60000000e+00  -2.40000000e+00
      -2.20000000e+00  -2.00000000e+00  -1.80000000e+00  -1.60000000e+00
      -1.40000000e+00  -1.20000000e+00  -1.00000000e+00  -8.00000000e-01
      -6.00000000e-01  -4.00000000e-01  -2.00000000e-01   6.21724894e-15
       2.00000000e-01   4.00000000e-01   6.00000000e-01   8.00000000e-01
       1.00000000e+00   1.20000000e+00   1.40000000e+00   1.60000000e+00
       1.80000000e+00   2.00000000e+00   2.20000000e+00   2.40000000e+00
       2.60000000e+00   2.80000000e+00   3.00000000e+00   3.20000000e+00
       3.40000000e+00   3.60000000e+00   3.80000000e+00   4.00000000e+00
       4.20000000e+00   4.40000000e+00   4.60000000e+00   4.80000000e+00
       5.00000000e+00   5.20000000e+00   5.40000000e+00   5.60000000e+00
       5.80000000e+00   6.00000000e+00   6.20000000e+00   6.40000000e+00
       6.60000000e+00   6.80000000e+00]
    

    两个参数:

    z=np.arange(3,8)
    [3 4 5 6 7]
    

    一个参数:

    z=np.arange(3)
    [0 1 2]