首页 > 解决方案 > np.arange 给出意想不到的值

问题描述

我正在使用 np.arange 生成 0 到 8 之间的实数(包括 8 个),并且使用以下命令以 0.002 的步长

import numpy as np
t=np.arange(0,8.002,0.002)
print(len(t))
print(t)

它应该给出从 0 到 8 的数字,其中每个数字超过前一个数字的步长为 0.002。但它也给出了最后一个数字 8.002,这不应该是这种情况。

输出

4002
[0.000e+00 2.000e-03 4.000e-03 ... 7.998e+00 8.000e+00 8.002e+00]

但是,如果我生成 0 到 7 之间的数字,步长为 0.002,那么 np.arange 会给出很好的结果

import numpy as np
t=np.arange(0,7.002,0.002)
print(len(t))
print(t)

输出

3501
[0.000e+00 2.000e-03 4.000e-03 ... 6.996e+00 6.998e+00 7.000e+00]

有人可以告诉我如何在生成 0 到 8 之间的数字时消除最后一个值 8.002 以及为什么会发生这种奇怪的行为?

标签: python

解决方案


改用 Numpy Linspace

你遇到了一个已知的问题。从 numpy 安排文档:

当使用非整数步长(例如 0.1)时,结果通常会不一致。对于这些情况,最好使用 numpy.linspace。

所以改为使用

start= 0
stop= 8
stepsize= 0.002
stepcount = int(round((stop-start)/stepsize))
t=np.linspace(start,stop,stepcount)
print(len(t))
print(t)

推荐阅读