如何处理不等式中的截断?

How to deal with truncation in inequations?

我有一个由 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.25h = 0.1。中间区间 p - h/2 <= x <= p + h/2 可以重写为 0.2 <= x <= 0.3。这意味着 y 数组的第 3 个和第 4 个元素应该是 10。但是当应用这个时,结果是

array([ 0.,  0., 10.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])

我认为这是由于 python 在 p + h/2 操作中被截断造成的。这样对吗?如果是,我该如何处理?

为了快速解决您的问题,我建议向相等运算符添加一个小的浮点偏移量,以确保您的值包含在范围内:

import numpy as np
p = 0.25
h = 0.1
delta = 1e-10 # add small float offset to account for rounding error

x = np.arange(0, 1.1, 0.1)
y = np.piecewise(x,
                [x<p-h/2-delta, (x>=p-h/2-delta)*(x<=p+h/2+delta), x>p+h/2+delta],
                [     0       ,              10                  ,      0       ])

y
>>> array([ 0.,  0., 10., 10.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])

还有一些函数 np.isclose 旨在处理此问题,但我还没有弄清楚如何让它们处理比较器,即。 <=。我很想知道解决方案。