基于自定义分段函数绘图,用Numpy创建对应数组(Python)
用Numpy构建分段类抛物线y向量的实现方法
没问题,我来帮你搞定这个需求!其实用Numpy实现这种分段的类抛物线曲线非常直接,完全不需要复杂的插值操作——我们可以利用Numpy的向量化特性,通过分段赋值或者专门的分段函数工具来完成,既高效又容易理解。
下面给出两种常用的实现方式,你可以根据自己的习惯选择:
方法一:分步掩码赋值(直观易懂)
这种方式一步步拆解逻辑,非常适合新手理解:
首先生成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)初始化y数组为全0:
y = np.zeros_like(x)筛选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
相关产品推荐
相关产品推荐

