Python 沿第一个维度的轴按列缩放三维numpy数组
我有一个表示时间序列数据的3d numpy数组,即[样本数、时间步长、特征] 我想在-1和1之间缩放每个特性。但是,应根据阵列第一维中所有样本的最大值和最小值缩放每个特征。例如,我的数组的形状如下:Python 沿第一个维度的轴按列缩放三维numpy数组,python,python-3.x,numpy,machine-learning,Python,Python 3.x,Numpy,Machine Learning,我有一个表示时间序列数据的3d numpy数组,即[样本数、时间步长、特征] 我想在-1和1之间缩放每个特性。但是,应根据阵列第一维中所有样本的最大值和最小值缩放每个特征。例如,我的数组的形状如下: multi_data.shape (66, 5004, 2) 我尝试了以下方法: data_min = multi_data.min(axis=1, keepdims=True) data_max = multi_data.max(axis=1, keepdims=True) multi_data
multi_data.shape
(66, 5004, 2)
我尝试了以下方法:
data_min = multi_data.min(axis=1, keepdims=True)
data_max = multi_data.max(axis=1, keepdims=True)
multi_data = (2*(multi_data-data_min)/(data_max-data_min))-1
问题是这会独立地扩展每个“批”(数组的第一个维度)。我想做的是在所有66个批次中按最大值和最小值缩放每个功能(我有两个),然后根据这些最大值和最小值缩放每个功能,但我不太清楚如何实现这一点。任何指针都是非常受欢迎的。将其与另一个
min/max
链接如何:
data_min = multi_data.min(axis=1, keepdims=True).min(axis=0, keepdims=True)
data_max = multi_data.max(axis=1, keepdims=True).max(axis=0, keepdims=True)
multi_data = (2*(multi_data-data_min)/(data_max-data_min))-1
或:
由于您采用的是前两个维度的min/max
,因此您可以忘记keepdims
而使用广播,这样在这种情况下可以节省大量内存:
data_min = multi_data.min(axis=(0,1))
data_max = multi_data.max(axis=(0,1))
multi_data = (2*(multi_data-data_min)/(data_max-data_min))-1
哇!这太神奇了。非常感谢你给出如此简洁而透彻的回答,我不知道我能像那样放弃keepdims!
data_min = multi_data.min(axis=(0,1))
data_max = multi_data.max(axis=(0,1))
multi_data = (2*(multi_data-data_min)/(data_max-data_min))-1