我创建了一系列规则间隔的数字,这些数字可以简单地用以下代码定义:
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)
这种方法是防失败的吗?你知道吗
np.arange
的工作原理是将step
添加到start
并比较结果是否为>= stop
,在这种情况下,它不会生成最后一个值(端点),否则重复该操作。你知道吗问题是,由于浮点数在内存中的表示方式,浮点数永远不可能相等。举个例子:
浮点数的这种行为可能导致
step=0.1
被加到0.7
的np.arange
的先前生成值上,并且小于stop=0.8
。这就是为什么有时arange似乎返回端点。它并不是真的返回endpoint,而是返回一个接近endpoint的数字,比如0.7999999999999999
,它被返回浮点数的字符串表示的方法四舍五入。你知道吗当步数固定时,
np.linspace
就不是这样了,因为您不会比较浮点数,而是计算一组步数的值。所以回答你的问题,是的,用你的方式使用np.linspace
是安全的。有关详细信息,请检查此github线程。你知道吗还要注意,我说过你应该有一个固定数量的步骤。如果您试图计算基于
start
和stop
的步数,您将遇到类似的问题,正如您在另一个answer上看到的那样。你知道吗相关问题 更多 >
编程相关推荐