使用np.arange,终点值应该不被输出,但是如图所示:
import numpy as np
M = np.arange(0.91, 0.93, 0.01)
print(M)
import numpy as np
M = np.arange(0.91, 0.99, 0.02)
print(M)
终点值0.99又没有被输出,很奇怪的问题,不太懂为啥。
import numpy as np
M = np.arange(0.91, 0.99, 0.01)
print(M)
但是有的组合就是会出现问题:
import numpy as np
M = np.arange(99.91, 99.93, 0.01)
print(M)
99.93又被输出:
感觉很奇怪的问题
该回答通过自己思路及引用到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]
,这样可以确保终点值不会被包含在内。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
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]