【发布时间】:2020-04-28 17:44:31
【问题描述】:
我有一个由 x 数组生成的分段数组
x = np.linspace(0, 1, 11) # = array([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])
y = np.piecewise(x,
[x < p - h/2, (x >= p - h/2)&(x <= p + h/2), x > p + h/2],
[ 0 , 10 , 0 ])
使用p = 0.25 和h = 0.1。中间区间p - h/2 <= x <= p + h/2 可以重写为0.2 <= x <= 0.3。这意味着y 数组的第三和第四个元素应该是10。但是当应用这个时,结果是
array([ 0., 0., 10., 0., 0., 0., 0., 0., 0., 0., 0.])
我认为这是由于p + h/2 操作中python 的截断。这样对吗?如果是,我该如何处理?
【问题讨论】:
-
按照您的建议,看起来是一个舍入错误。
from decimal import Decimal和你的号码是:Decimal(p+h/2) = Decimal('0.299999999999999988897769753748434595763683319091796875')和Decimal(x[3]) = Decimal('0.3000000000000000444089209850062616169452667236328125')因此错误。 -
有没有办法纠正这个问题?
-
出于兴趣,它看起来也与 numpy 相关:
0.3 <= p+h/2 >>> True而x[3] <= p+h/2 >>> False。还有np.float(0.3) <= p+h/2 >>> True,所以看起来linspace有一些舍入错误。
标签: python numpy truncation piecewise