如何处理不等式中的截断?
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.25
和 h = 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
旨在处理此问题,但我还没有弄清楚如何让它们处理比较器,即。 <=
。我很想知道解决方案。
我有一个由 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
数组的第 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
旨在处理此问题,但我还没有弄清楚如何让它们处理比较器,即。 <=
。我很想知道解决方案。