np.arange给出了不期望的值

  • 本文关键字:期望 arange np python
  • 更新时间 :
  • 英文 :


我使用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?为什么会发生这种奇怪的行为??

改为使用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)

如上所述,您可以使用linspace,也可以将下面的行添加到代码中,它只会删除最后一个元素。

t.pop()


最新更新