离散色图边界开闭规则及BoundaryNorm下0归属区间查询
验证0所属区间及边界查询方法
一、验证0属于哪个区间
有两种直接的验证方式:
用BoundaryNorm实例直接测试
创建好归一化规则后,直接将0传入norm对象,返回的整数索引对应它所属的区间。例如:import numpy as np import matplotlib.colors as mcolors # 示例:用linspace生成包含0的3个边界刻度 boundaries = np.linspace(-10, 10, 3) # 创建BoundaryNorm实例(区间数=边界数-1) norm = mcolors.BoundaryNorm(boundaries, len(boundaries)-1) # 测试0的归属 idx = norm(0) print(f"0对应的区间索引:{idx}") # 根据BoundaryNorm的左闭右开规则(最后一个区间右闭)输出对应区间 if idx < len(boundaries)-1: print(f"所属区间:[{boundaries[idx]}, {boundaries[idx+1]})") else: print(f"所属区间:[{boundaries[idx-1]}, {boundaries[idx]}]")Matplotlib的
BoundaryNorm默认采用左闭右开的区间规则:除最后一个区间是[boundaries[-2], boundaries[-1]](右闭),其余均为[boundaries[i], boundaries[i+1])。通过索引可直接定位0的所属区间。测试边界附近的微小值
考虑浮点数精度问题,可测试接近0的正负微小值(如1e-16、-1e-16),对比它们的分类结果,确认边界处的实际行为。比如若norm(-1e-16)与norm(0)返回不同索引,说明0属于右侧区间;若索引相同,则属于左侧区间。
二、查询边界阈值
- 直接查看linspace生成的数组
你用linspace生成的边界数组可直接打印,查看所有阈值的精确存储值(包括浮点数的微小误差):print(boundaries) - 从BoundaryNorm实例中获取
已创建的BoundaryNorm对象自带boundaries属性,直接调用即可获取完整的边界数组:print(norm.boundaries)
三、浮点数精度问题的处理
如果linspace生成的边界理论上包含0,但实际存储为接近0的浮点数(如1e-16),会导致0的归属判断偏差:
- 先打印边界数组,确认0是否精确存在;
- 若需严格以0为边界,手动调整边界数组,将对应位置设置为精确的
0.0; - 若数据集允许,可对0值做微小偏移(如
0 + 1e-18),确保它落入预期区间(需结合业务需求判断可行性)。
内容的提问来源于stack exchange,提问作者thefrollickingnerd
相关产品推荐
相关产品推荐

