如何在2000采样点的窗口上执行Windowed Min-max transformation而非全量归一化
窗口式Min-Max归一化实现方案
直接针对你要的2000采样点窗口需求,分两种常用场景提供实现代码:
非重叠固定窗口归一化
每2000个采样点作为独立窗口,各自拟合归一化参数,和你原有全量归一化的逻辑完全一致,仅缩小了拟合范围:
import numpy as np from sklearn.preprocessing import MinMaxScaler window_size = 2000 n_samples, n_features = X.shape X_window_norm = np.zeros_like(X) for start_idx in range(0, n_samples, window_size): end_idx = start_idx + window_size # 仅提取当前窗口数据拟合scaler scaler = MinMaxScaler() X_window_norm[start_idx:end_idx] = scaler.fit_transform(X[start_idx:end_idx])
上述代码会自动处理最后不足2000采样点的尾部窗口,输出数组形状和原X完全一致。
滑动窗口归一化
如果需要每个采样点的归一化参数基于其前2000个相邻采样点计算(即窗口随采样点滑动),可以用pandas滚动窗口实现,代码更简洁:
import pandas as pd window_size = 2000 df = pd.DataFrame(X) # 计算滚动窗口内的最值 rolling_min = df.rolling(window=window_size, min_periods=1).min() rolling_max = df.rolling(window=window_size, min_periods=1).max() # 执行归一化,自动处理除0异常 X_slide_norm = ((df - rolling_min) / (rolling_max - rolling_min).replace(0, 1)).values
参数min_periods=1用于处理前1999个采样点窗口不足的场景,如果你要求窗口满2000才计算归一化值,移除该参数即可,前1999个点位会返回NaN。
内容的提问来源于stack exchange,提问作者alex3465
相关产品推荐
相关产品推荐

