You need to enable JavaScript to run this app. Pyplot绘制分段函数时x轴起始为负值触发NumPy布尔索引报错如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Pyplot绘制分段函数时x轴起始为负值触发NumPy布尔索引报错如何解决

报错核心原因
  • np.piecewise的分段值匹配规则为:每个分段值如果是数组形式,长度必须和对应条件掩码里True值的数量完全一致;如果是标量则无长度要求。
  • 原有代码中,传入的分段值(1/100)*x*np.exp(-x/10)是基于全量x数组(固定100个元素)计算的数组:
    • 当x从0起始时,x >= 0掩码全为True(共100个匹配位置),长度和计算结果完全匹配,程序可正常运行
    • 当x范围改为[-100, 100]时,x >= 0掩码仅包含约50个True值,此时将100长度的数组赋值给50个匹配位置,直接触发长度不匹配报错。
修复方案

将基于全量x的直接计算,替换为可调用函数形式传入分段值。np.piecewise会自动将每个条件匹配的x子片段传入函数计算,从根源上保证返回结果长度和掩码匹配数完全一致,适配任意x范围:

y = np.piecewise(
    x,
    [x < 0, x >= 0],
    [
        0,  # 标量,无长度匹配要求
        lambda x_segment: (1/100)*x_segment*np.exp(-x_segment/10)  # 接收对应区间的x子集计算
    ]
)
完整可运行代码
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-100, 100, 100)
y = np.piecewise(
    x,
    [x < 0, x >= 0],
    [0, lambda x_sub: (1/100)*x_sub*np.exp(-x_sub/10)]
)
z = -np.exp(-x/10)*((x/10)+1)+1
plt.plot(x, y, 'r', label='test')
plt.legend(loc='right')
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.31 15:27:01