python - 如何处理不等式中的截断?
问题描述
我有一个由 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
旨在处理这个问题,但我还没有设法弄清楚如何让它们处理比较器,即。<=
. 我很想知道解决方案。
推荐阅读
- c++ - 如何在不依赖于操作系统的搜索路径或任何环境变量的情况下为 g++ 命令指定 ld.exe 的路径?
- excel - Excel:如何获取当前单元格下方具有值的行的值?
- java - Java 时间段(十进制月数)
- python - 如何在python中设置类的模拟实例变量?
- backup - 备份数据库运行进程 processDB = Process.Start("DBBackup.bat");
- firebase - Firebase 深层链接:无效的动态链接
- python - 如何使用硒处理分页和刮擦
- python - 将两行具有不同索引的数据框组合起来
- kubernetes - 使用 SR-IOV 隔离 pod 流量
- python - 二进制表示