恒定值衰减导致相同的下降斜率

问题描述 投票:1回答:1

我需要随着时间的推移衰减或稳定地减少值,导致所有值的下降斜率相同。这些值可以是正数或负数,范围从小± .01到大± 100.0

在我的代码中,我设置了一个linear_decay数组,其中我尝试通过乘法来衰减值。不幸的是,这会导致缩放问题 - 大数字的斜率比较小的值更陡峭。我需要所有斜率都相同,理想情况是在-45°角,或者用线y = mx+bm = -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,
);

multiplication method

我可以纠正负值,但我无法弄清楚如何在小值和大值之间缩放相同的斜率来获得相同的斜率。这是我到目前为止最接近的:

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))
);

slopes are all wrong

你可以看到,较大的数字导致更陡峭的斜率,而较小的数字看起来平坦。我无法弄清楚如何为所有值获得相同的斜率。

python python-3.x pandas numpy plot
1个回答
0
投票

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

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
);

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.