python - 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 以及为什么会发生这种奇怪的行为?
解决方案
改用 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)
推荐阅读
- c++ - 引用和指向常量的指针有什么用?
- javascript - 想用Javascript实现响应式图片
- c - 为什么下面的程序输出是 5,而不是 4?谁能解释一下?
- java - 编辑 iText PDF Java
- drop-down-menu - 在小部件中找不到方法“SetState”
- c++ - Android 工作室和对象库
- sql - Oracle SQL - ListAgg - ORA-00923:在预期的地方找不到 FROM 关键字
- c# - SynchronizedCollection InvalidOperationException/System.ArgumentException
- javascript - 如何在不同的下拉选择中加载不同的内容?
- java - Oracle 函数中的默认值