创建规则间隔的数字序列

2024-04-19 21:46:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一系列规则间隔的数字,这些数字可以简单地用以下代码定义:

l=6          # Number of elements
h=1          # Spatial regular interval
v=[-h/2]     # First element
for i in range(l,start=1):
    v.append(v[-1]+h)

我用np.arange来表示,比如:

np.arange(-h/2, h*(l-.5), h)

但是文档说应该使用np.linspace,因为我没有使用intergers。你知道吗

np.linspace(-h/2, h*(l-.5), l, endpoint=False)

这种方法是防失败的吗?你知道吗


Tags: of代码number间隔定义规则np数字
1条回答
网友
1楼 · 发布于 2024-04-19 21:46:29

np.arange的工作原理是将step添加到start并比较结果是否为>= stop,在这种情况下,它不会生成最后一个值(端点),否则重复该操作。你知道吗

问题是,由于浮点数在内存中的表示方式,浮点数永远不可能相等。举个例子:

>>> 0.5 + 0.1 + 0.1 + 0.1 < 0.8
True

浮点数的这种行为可能导致step=0.1被加到0.7np.arange的先前生成值上,并且小于stop=0.8。这就是为什么有时arange似乎返回端点。它并不是真的返回endpoint,而是返回一个接近endpoint的数字,比如0.7999999999999999,它被返回浮点数的字符串表示的方法四舍五入。你知道吗

当步数固定时,np.linspace就不是这样了,因为您不会比较浮点数,而是计算一组步数的值。所以回答你的问题,是的,用你的方式使用np.linspace是安全的。有关详细信息,请检查此github线程。你知道吗

还要注意,我说过你应该有一个固定数量的步骤。如果您试图计算基于startstop的步数,您将遇到类似的问题,正如您在另一个answer上看到的那样。你知道吗

相关问题 更多 >