Python 沿第一个维度的轴按列缩放三维numpy数组

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

我有一个表示时间序列数据的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 = (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