如何用range或numpy arange生成包含终止值的数值序列?
嘿,咱们一步步来解决你的问题~
首先明确:range()完全没法实现你的需求,因为它只接受整数类型的参数,根本生成不了浮点数序列,直接排除这个选项。
接下来说说arange的问题:你用np.arange(0.0, 0.6, 0.2)得不到0.6,是因为arange的逻辑是「生成从start开始,以step为步长,直到但不包含stop的序列」。而且浮点数的二进制精度问题,有时候还会让结果更出乎意料(正常情况下这个调用应该输出[0. 0.2 0.4],可能你那边有特殊环境影响?)
要实现包含0.6的序列,有两个靠谱的办法:
方法1:微调终止值(快速但依赖精度)
既然arange不包含stop,那我们可以把stop设置成比期望的0.6稍微大一点点的数(比如加个极小的偏移量1e-8),这样就能确保序列包含0.6:
import numpy as np arr = np.arange(0.0, 0.6 + 1e-8, 0.2) print(arr) # 输出: [0. 0.2 0.4 0.6]
不过这个方法有个小隐患:如果你的步长和终止值组合比较复杂,浮点数精度可能还是会搞出问题,所以更推荐下面的方法。
方法2:用linspace(最稳妥,推荐)
numpy的linspace就是专门用来解决这种「需要包含起止点的均匀序列」需求的。你只需要指定起始值、终止值,以及你想要的元素个数就行:
import numpy as np arr = np.linspace(0.0, 0.6, 4) print(arr) # 输出: [0. 0.2 0.4 0.6]
这里第三个参数4表示生成4个均匀分布的点,正好对应你要的四个数值。这个方法完全不会受浮点数步长累积误差的影响,是最可靠的选择。
内容的提问来源于stack exchange,提问作者WPFKK
相关产品推荐
相关产品推荐

