python - 恒定值衰减导致相同的下降斜率
问题描述
我需要随着时间的推移衰减或稳步减少值,从而导致所有值的下降斜率相同。这些值可以是正数或负数,范围从小± .01
到大± 100.0
。
在我的代码中,我设置了一个linear_decay
数组,我尝试在其中通过乘法衰减值。不幸的是,这会导致缩放问题——大数字向下倾斜的斜率比小数字大。我需要所有的斜率都相同,最好是 -45° 角,或者根据直线方程y = mx+b
, m = -1
。
%matplotlib inline
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np
import pandas as pd
# timeseries will be 10 units long
points = 10
# create an array that will decay the values over time
linear_decay = np.linspace(0, 1, points, endpoint=False)[::-1]
打印出来linear_decay
,你会看到它看起来像:
[0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0. ]
现在我创建了一些数据 - 充满相同精确值的数组,因此我可以看到它们如何随时间衰减。
x = np.arange(points)
y = np.full((points,), 1) # an array full of 1s
y_25 = y * 25
y_75 = y * 75
y_neg_25 = y * -25
y_neg_75 = y * -75
简单地乘以linear_decay
对负值不起作用,并且一切都收敛到零,这是我不想要的:
plt.plot(
x, y_25 * linear_decay,
x, y_75 * linear_decay,
x, y_neg_25 * linear_decay,
x, y_neg_75 * linear_decay,
);
我可以纠正负值,但我不知道如何在小值和大值上缩放相同以获得相同的斜率。这是我到目前为止最接近的:
plt.plot(
x, y_25 - abs(y_25 - (linear_decay * y_25)),
x, y_75 - abs(y_75 - (linear_decay * y_75)),
x, y_neg_25 - abs(y_neg_25 - (linear_decay * y_neg_25)),
x, y_neg_75 - abs(y_neg_75 - (linear_decay * y_neg_75))
);
您可以看到较大的数字导致更陡峭的斜率,而较小的数字看起来很平坦。我不知道如何为所有值获得相同的斜率。