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

基于自定义分段函数绘图,用Numpy创建对应数组(Python)

用Numpy构建分段类抛物线y向量的实现方法

没问题,我来帮你搞定这个需求!其实用Numpy实现这种分段的类抛物线曲线非常直接,完全不需要复杂的插值操作——我们可以利用Numpy的向量化特性,通过分段赋值或者专门的分段函数工具来完成,既高效又容易理解。

下面给出两种常用的实现方式,你可以根据自己的习惯选择:

方法一:分步掩码赋值(直观易懂)

这种方式一步步拆解逻辑,非常适合新手理解:

  1. 首先生成x数组:
    你可以用np.linspace生成连续的浮点型x值(比如1000个点,保证曲线足够平滑),或者用np.arange生成整数点:

    import numpy as np
    
    # 生成0到24的连续x值,共1000个点
    x = np.linspace(0, 24, 1000)
    # 如果只需要整数点,用这个:x = np.arange(0, 25)
    
  2. 初始化y数组为全0:

    y = np.zeros_like(x)
    
  3. 筛选6-18区间的x索引,计算抛物线值:
    我们选择开口向下的对称抛物线,顶点落在x=12(6-18的中点),刚好在x=6和x=18时y值为0,完美衔接两端的0区间。你可以通过修改公式系数自定义曲线的陡峭程度和峰值:

    # 筛选6<=x<=18的掩码
    mask = (x >= 6) & (x <= 18)
    # 计算抛物线值:这里峰值为1,你可以调整系数改变形态
    y[mask] = -(x[mask] - 12)**2 / 36 + 1
    

    👉 举个例子:如果想要峰值为2,公式改成-(x[mask]-12)**2 / 18 + 2;想要更平缓的曲线,增大分母数值即可。

方法二:用np.piecewise实现分段函数(代码紧凑)

Numpy的np.piecewise函数专门用于处理分段函数,能把所有逻辑整合在一块,代码更简洁:

import numpy as np

x = np.linspace(0, 24, 1000)
y = np.piecewise(
    x,
    # 定义三个区间的判断条件
    [x < 6, (x >= 6) & (x <= 18), x > 18],
    # 对应每个区间的取值/计算逻辑
    [0, lambda x: -(x - 12)**2 / 36 + 1, 0]
)

验证效果

如果想快速查看生成的曲线,用matplotlib画一下就行:

import matplotlib.pyplot as plt

plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('y')
plt.grid(True)
plt.show()

你会看到完全符合需求的曲线:0-6和18-24区间y保持0,中间6-18是对称的抛物线形态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:01:31