python - 沿第一维的轴按列缩放 3d numpy 数组
问题描述
我有一个表示时间序列数据的 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
或者:
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
推荐阅读
- yii2 - 仅在 yii2 中的 Lgin 之后包含一个注释
- python - 为什么 Python Decimal sum 不可交换(更改顺序时结果不同)
- elasticsearch - 弹性搜索中的自定义点击顺序
- python - 如何打印 \0 \a \b \v \f 等字符
- python - 如何运行 for 循环的所有迭代然后在最后失败?
- c# - 如何将字符串与元组匹配
- python - 删除二维数组python中的空单元格
- php - Vue模块未编译
- c++ - 将另一个函数作为参数的函数,“无匹配函数错误”C++
- visual-studio-code - VSCode/Cmake Tools:添加外部头库