Translation not up to date
Tembel değerlendirme, bir ifadenin değerine gereksinim duyuluncaya kadar değerlendirilmesini geciktiren bir değerlendirme stratejidir. Tembel değerlendirme stratejisi, anıları ile birleştirildiğinde, yinelenen değerlendirmeler önlenir ve belirli işlevlerin çalışma süresini önemli bir etkenle azaltabilir.
Zaman dizisi kitaplığı, verileri işlemek için tembel değerlendirmeyi kullanır. Bir yürütme grafiği, değerlendirmesi yalnızca çıkışı somutlaştırılmış sorgu olduğunda tetiklenen zaman dizisi verileri üzerinde oluşturulur. Bir nesnenin, konumu x (t) tarafından yakalanan tek boyutlu bir boşlukta hareket ettiğini varsayarsak. Hız (v(t)
) ve hızlandırma (a(t)
) zaman serilerini aşağıdaki gibi kullanarak bu nesnenin sert hızlanma/frenleme (h(t)
) değerini belirleyebilirsiniz:
# 1d location timeseries
x(t) = input location timeseries
# velocity - first derivative of x(t)
v(t) = x(t) - x(t-1)
# acceleration - second derivative of x(t)
a(t) = v(t) - v(t-1)
# harsh acceleration/braking using thresholds on acceleration
h(t) = +1 if a(t) > threshold_acceleration
= -1 if a(t) < threshold_deceleration
= 0 otherwise
Bu, formdaki basit bir yürütme grafiğiyle sonuçlanır:
x(t) --> v(t) --> a(t) --> h(t)
Değerlendirmeler yalnızca bir işlem gerçekleştirildiğinde tetiklenir; örneğin, compute h(5...10)
, örn. compute h(5), ..., h(10)
. Kitaplık, zaman serileri arasında dar zamansal bağımlılıkları yakalar. In this example, h(5...10)
requires a(5...10)
, which in turn requires v(4...10)
, which then requires x(3...10)
. Yalnızca a(t)
, v(t)
ve x(t)
' nin ilgili bölümleri değerlendirilir.
h(5...10) <-- a(5...10) <-- v(4...10) <-- x(3...10)
Ayrıca, değerlendirmeler anı anılır ve bu nedenle h
üzerinde sonraki eylemlerde yeniden kullanılabilir. For example, when a request for h(7...12)
follows a request for h(5...10)
, the memoized values h(7...10)
would be leveraged; further, h(11...12)
would be evaluated using a(11...12), v(10...12)
and x(9...12)
, which would in turn leverage v(10)
and x(9...10)
memoized from the prior computation.
Daha genel bir örnekte, aşağıdaki gibi bir süpen hız timeseries tanımlanabilirsiniz:
# 1d location timeseries
x(t) = input location timeseries
# velocity - first derivative of x(t)
v(t) = x(t) - x(t-1)
# smoothened velocity
# alpha is the smoothing factor
# n is a smoothing history
v_smooth(t) = (v(t)*1.0 + v(t-1)*alpha + ... + v(t-n)*alpha^n) / (1 + alpha + ... + alpha^n)
# acceleration - second derivative of x(t)
a(t) = v_smooth(t) - v_smooth(t-1)
Bu örnekte h(l...u)
, aşağıdaki geçici bağımlılığına sahiptir. h(l...u)
' in değerlendirilmesi, bu geçici bağımlılıkla ilgili anılarla kesinlikle uyumlu olacaktır.
h(l...u) <-- a(l...u) <-- v_smooth(l-1...u) <-- v(l-n-1...u) <-- x(l-n-2...u)
Örnek
Aşağıdaki örnekte, basit bir bellek içi zaman serisinde sert hızlandırmayı gerçekleştiren bir python kodu parçacığı gösterilmektedir. Kitaplıkta çok sayıda yerleşik dönüştürme var. Bu örnekte, hızlandırma süresi serisini hesaplamak için konum zaman serisine iki kez fark dönüşümü uygulanır. A map operation is applied to the acceleration time series using a harsh lambda function, which is defined after the code sample, that maps acceleration to either +1
(harsh acceleration), -1
(harsh braking) and 0
(otherwise). Süzgeç işlemi, yalnızca sert hızlanma ya da sert frenleme gözlendiği durumlar için seçilir. get_values
çağrılmadan önce bir yürütme grafiği yaratılır, ancak hiçbir hesaplama gerçekleştirilmez. On calling get_values(5, 10)
, the evaluation is performed with memoization on the narrowest possible temporal dependency in the execution graph.
import tspy
from tspy.builders.functions import transformers
x = tspy.time_series([1.0, 2.0, 4.0, 7.0, 11.0, 16.0, 22.0, 29.0, 28.0, 30.0, 29.0, 30.0, 30.0])
v = x.transform(transformers.difference())
a = v.transform(transformers.difference())
h = a.map(harsh).filter(lambda h: h != 0)
print(h[5, 10])
sert lambda şu şekilde tanımlanıyor:
def harsh(a):
threshold_acceleration = 2.0
threshold_braking = -2.0
if (a > threshold_acceleration):
return +1
elif (a < threshold_braking):
return -1
else:
return 0
Daha fazla bilgi
tspy
Python SDK ' yı kullanmak için, tspy
Python SDK belgelerine bakın.
Üst konu: Zaman serisi analizi