按列缩放三维numpy数组的第一维度

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

或者:

data_min = multi_data.min(axis=(0,1), keepdims=True)data_max = multi_data.max(axis=(0,1), 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

Related Posts

Tensorflow 2: 加载后无法跟踪子类模型属性的问题

以下是我在Tensorflow 2.5中实现的一个子类…

获取转换后用于分类的最重要特征名称

我在Python中有一个分类问题。我想找出哪些是分类中…

如何构建我自己的手写数字数据集

我有一组从0到20的数字图像,包括中间类别(0,25 …

如何在使用Anaconda的Jupyter Notebook中加载包含标签的数据集?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

HDBSCAN参数之间的差异

我对HDBSCAN中以下参数的差异感到困惑 min_c…

在重新训练时应重新标准化训练数据吗?

我正在运行一个简单的Keras深度学习模型,初始训练一…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注