Skip to content
Snippets Groups Projects
Commit cf8067a5 authored by Pierre LOTTE's avatar Pierre LOTTE
Browse files

Add log correlation

parent bc2f4e2a
No related branches found
No related tags found
No related merge requests found
"""
This module defines the logarithmic correlated dimension generator.
"""
import numpy as np
from .base import BaseDimension
class LogCorrelationDimension(BaseDimension):
"""
This class defines a loarithmically correlated dimension. It will follow logonantial function and will go
up when the correlated dimension does go up and go down when the correlated dimension goes down.
"""
def generate(self) -> np.array:
# Compute useful data
log_diffs = np.flip(np.exp(np.linspace(self.terms["start"], self.terms["end"], self.data.shape[1]//5))) /10
# Compute testing data
# Find the dimension to watch for
corr_dim = self.data[self.params["dimension"]]
# Check for lag parameter
lag = self.terms["lag"] if "lag" in self.terms else 0
# Compute values
sign = np.sign(np.diff(corr_dim))
signchange = ((np.roll(sign, 1) - sign) != 0).astype(int)
steps = np.zeros(self.data.shape[1])
idx_log = 0
for i in range(len(self.data[self.idx, 1:])):
if signchange[i] == 1:
idx_log = 0
steps[i+1] = log_diffs[idx_log]
idx_log += 1
steps[1:] *= sign * self.terms["sign"]
self.data[self.idx, lag:] = np.cumsum(steps)[:-lag] if lag > 0 else np.cumsum(steps)
# Compute training data
# Find the dimension to watch for
corr_dim = self.train_data[self.params["dimension"]]
# Compute values
sign = np.sign(np.diff(corr_dim))
signchange = ((np.roll(sign, 1) - sign) != 0).astype(int)
steps = np.zeros(self.train_data.shape[1])
idx_log = 0
for i in range(len(self.train_data[self.idx, 1:])):
if signchange[i] == 1:
idx_log = 0
steps[i+1] = log_diffs[idx_log]
idx_log += 1
steps[1:] *= sign * self.terms["sign"]
self.train_data[self.idx, lag:] = np.cumsum(steps)[:-lag] if lag > 0 else np.cumsum(steps)
return self.data, self.train_data
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment