from __future__ import annotations
def standard_scale(data: list, mean: float, std: float) -> list:
result = [0.0] * len(data)
for i in range(len(data)):
result[i] = (data[i] - mean) / std
return result
def min_max_scale(data: list, min_val: float, max_val: float) -> list:
result = [0.0] * len(data)
range_val = max_val - min_val
for i in range(len(data)):
result[i] = (data[i] - min_val) / range_val
return result
def robust_scale(data: list, median: float, iqr: float) -> list:
result = [0.0] * len(data)
for i in range(len(data)):
result[i] = (data[i] - median) / iqr
return result
def l2_normalize(data: list) -> list:
total = 0.0
for i in range(len(data)):
total += data[i] * data[i]
norm = total ** 0.5
result = [0.0] * len(data)
for i in range(len(data)):
result[i] = data[i] / norm
return result
if __name__ == "__main__":
import time
n = 100_000
data = [float(i % 256) for i in range(n)]
n_iters = 1_000
print(f"Benchmarking sklearn-style scalers (n={n}, iters={n_iters})...")
start = time.perf_counter()
for _ in range(n_iters):
standard_scale(data, 128.0, 64.0)
elapsed = time.perf_counter() - start
print(f" standard_scale: {elapsed:.3f}s ({elapsed/n_iters*1000:.2f}ms/call)")
start = time.perf_counter()
for _ in range(n_iters):
min_max_scale(data, 0.0, 255.0)
elapsed = time.perf_counter() - start
print(f" min_max_scale: {elapsed:.3f}s ({elapsed/n_iters*1000:.2f}ms/call)")
start = time.perf_counter()
for _ in range(n_iters):
l2_normalize(data[:1000])
elapsed = time.perf_counter() - start
print(f" l2_normalize: {elapsed:.3f}s ({elapsed/n_iters*1000:.2f}ms/call)")