You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

numpy.r_构造数组时为何有时包含端点有时不包含?

numpy.r_切片端点包含行为的不一致性

numpy.r_支持用切片语法快速构造数组,但实际使用中会出现端点包含行为不一致的情况:

import numpy as np

a = np.r_[0.1 : 0.3 : 0.1]
print(a)  # 输出:array([0.1, 0.2])

这里切片端点0.3未被包含,符合常规切片“左闭右开”的预期。

但换一个端点后:

b = np.r_[0.1 : 0.4 : 0.1]
print(b)  # 输出:array([0.1, 0.2, 0.3, 0.4])

端点0.4却被包含了,这种不一致性容易让人困惑。

原因解析

这本质是浮点数精度误差和numpy内部数组生成逻辑共同导致的。numpy.r_的切片模式底层依赖类似np.arange()的实现逻辑:从起始值开始,不断累加步长,直到下一个值超过终止值时停止。但由于0.1这类十进制小数无法在二进制浮点数中精确表示,累加过程中会产生微小的精度偏差:

  • 当终止值是0.3时,0.1 + 0.1 + 0.1的实际存储值会略大于0.3,因此不会被包含在结果中;
  • 当终止值是0.4时,0.1 * 4的实际存储值恰好处于numpy的精度容忍范围内,被判定为未超过终止值,因此这个值会被保留在结果数组里。

解决方案

如果需要严格的“左闭右开”行为,建议:

  • 使用np.linspace()生成数组后手动排除端点;
  • 将数值转换为精确的小数类型(比如decimal.Decimal)后再处理。

内容的提问来源于stack exchange,提问作者apsis73

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 14:10:40