Tutorial 4: Standardizing Within Runs Using neurocaps.analysis.standardize

While standardizing the features/columns within runs can be done with the standardize parameter within TimeseriesExtractor, standardizing can also be done using neurocaps.analysis.standardize if not done during timeseries extraction.

import numpy as np
from neurocaps.analysis import standardize

subject_timeseries = {str(x): {f"run-{y}": np.random.rand(10, 100) for y in range(1, 4)} for x in range(1, 6)}

# Getting mean and standard deviation for run 1 and 2 of subject 1
mean_vec_1 = subject_timeseries["1"]["run-1"].mean(axis=0)
std_vec_1 = subject_timeseries["1"]["run-1"].std(ddof=1, axis=0)
mean_vec_2 = subject_timeseries["1"]["run-2"].mean(axis=0)
std_vec_2 = subject_timeseries["1"]["run-2"].std(ddof=1, axis=0)

# Avoid numerical stability issues
std_vec_1[std_vec_1 < np.finfo(np.float64).eps] = 1.0
std_vec_2[std_vec_2 < np.finfo(np.float64).eps] = 1.0

standardized_subject_timeseries = standardize(subject_timeseries_list=[subject_timeseries])

standardized_1 = (subject_timeseries["1"]["run-1"] - mean_vec_1) / std_vec_1
standardized_2 = (subject_timeseries["1"]["run-2"] - mean_vec_2) / std_vec_2

print(np.array_equal(standardized_subject_timeseries["dict_0"]["1"]["run-1"], standardized_1))
print(np.array_equal(standardized_subject_timeseries["dict_0"]["1"]["run-2"], standardized_2))
True
True