Выбирая использование np.piecewise
, вам просто нужно указать интервалы наклона стоимости как condlist
и соответствующие выражения линейной функции как funclist
, например:
import numpy as np
import matplotlib.pyplot as plt
x = np.array([-200,-100,0,100,200,300])
condlist = [x<-200,\
np.logical_and(x>=-200, x<0),\
x==0,\
np.logical_and(x>0,x<=200),\
x>200]
funclist = [lambda x: 200*60+abs(x+200)*10,\
lambda x: abs(x)*60,\
lambda x:0,\
lambda x: abs(x)*1,\
lambda x: 200*1+abs(x-200)*10]
f = np.piecewise(x,condlist,funclist)
проверка правильности реализации с заданным очков, это следует:
np.allclose([12000,6000,0,100,200,1200],f)
>>> True
, которая построена для большего диапазона, скажем, x = np.linspace(-500,500,2000)
, в итоге дает:
plt.plot(x, f,'r')
plt.scatter([-200,-100,0,100,200,300],[12000,6000,0,100,200,1200],s=20,zorder=5)
Надеюсь, это поможет.