首页 > 解决方案 > 恒定值衰减导致相同的下降斜率

问题描述

我需要随着时间的推移衰减或稳步减少值,从而导致所有值的下降斜率相同。这些值可以是正数或负数,范围从小± .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))
);

斜坡都是错误的

您可以看到较大的数字导致更陡峭的斜率,而较小的数字看起来很平坦。我不知道如何为所有值获得相同的斜率。

标签: pythonpython-3.xpandasnumpyplot

解决方案


答案是简单地减去一个常数值。

sub_array = np.linspace(points, 1, 10)[::-1]
plt.plot(
    x, y_25 - sub_array,
    x, y_75 - sub_array,
    x, y_neg_25 - sub_array,
    x, y_neg_75 - sub_array
);

在此处输入图像描述


推荐阅读