一般的に言えば、あなたはいくつかの範囲に渡って「イージング関数」を適用すると思います。例えば
は、下図考慮してください。ここでは
を、我々は2つの元のデータセットを持っています。 2つを減算し、その差に3行目に示すイージング関数を掛けて、結果を最初の曲線に戻します。これにより、灰色領域の左側の元のデータ、灰色領域内の2つのブレンド、および灰色領域の右側の他の曲線のデータである新しい系列が得られます。一例として、
:あなたは上記のプロットについて興味があれば
import numpy as np
import matplotlib.pyplot as plt
# Generate some interesting random data
np.random.seed(1)
series1 = np.random.normal(0, 1, 1000).cumsum() + 20
series2 = np.random.normal(0, 1, 1000).cumsum()
# Our x-coordinates
index = np.arange(series1.size)
# Boundaries of the gray "easing region"
i0, i1 = 300, 700
# In this case, I've chosen a sinusoidal easing function...
x = np.pi * (index - i0)/(i1 - i0)
easing = 0.5 * np.cos(x) + 0.5
# To the left of the gray region, easing should be 1 (all series2)
easing[index < i0] = 1
# To the right, it should be 0 (all series1)
easing[index >= i1] = 0
# Now let's calculate the new series that will slowly approach the first
# We'll operate on the difference and then add series1 back in
diff = series2 - series1
series3 = easing * diff + series1
はまた、ここではそれが生成されています方法は次のとおりです。
fig, axes = plt.subplots(nrows=4, sharex=True)
axes[0].plot(series1, color='lightblue', lw=2)
axes[0].plot(series2, color='salmon', lw=1.5)
axes[0].set(ylabel='Original Series')
axes[1].plot(diff, color='gray')
axes[1].set(ylabel='Difference')
axes[2].plot(easing, color='black', lw=2)
axes[2].margins(y=0.1)
axes[2].set(ylabel='Easing')
axes[3].plot(series1, color='lightblue', lw=2)
axes[3].plot(series3, color='salmon', ls='--', lw=2, dashes=(12,20))
axes[3].set(ylabel='Modified Series')
for ax in axes:
ax.locator_params(axis='y', nbins=4)
for ax in axes[-2:]:
ax.axvspan(i0, i1, color='0.8', alpha=0.5)
plt.show()
だから必ず私が正しく理解させるために:あなたはすでに持っています'' a''と '' b''両方のデータを扱いますが、 '' b''を漸近的に '' a''に近づけるように変更したいのですか?あるいは、最初から '' b''を生成したいのですか? – pmos
'a'をより正確な数学的表現で' b'に近づける方法を説明できますか?私は、 'a'に適用されたインクリメントが「偶数サイズ」の場合、' a'が 'b' *に漸近的に近づく方法を見ません。あなたが望む操作を行う、遅い 'for'ループを表示できれば、ベクトル化されたアプローチをテストすることができます。 –
@pmos前者:私は 'a'と' b'の両方を持っていて、 'b'を一定の期間にわたって' a'に近づけるように変更したいと思っています。 – ako