如何标准化 4D 数组(不是图像)?

How to normalize 4D array ( not an image)?

我有一个形状为 (1948, 60, 2, 3) 的 4D 数组,它显示了超过 60 个时间步的末端执行器位置 (x,y,z) 的差异。 数字1948表示样本数,60是时间步数,2表示left_arm和right_arm,3表示x,y,z 位置。

外观示例如下:

array([[[  3.93048840e-05,   7.70215296e-04,   1.13865805e-03],
        [  1.11679799e-04,  -7.04810066e-04,   1.83552688e-04]],

   [[ -6.26468389e-04,   6.86668923e-04,   1.57112482e-04],
    [  3.68164582e-04,   7.98948528e-04,   4.50642200e-04]],

   [[  2.51472961e-04,  -2.48105983e-04,   7.52486843e-04],
    [  8.99905240e-05,   1.70473461e-04,  -3.09927572e-04]],

   [[ -7.52414330e-04,   5.46782063e-04,  -3.76679264e-04],
    [ -3.12531026e-04,  -3.36585211e-04,   5.79075595e-05]],

   [[  7.69968002e-04,  -1.95524291e-03,  -8.65666619e-04],
    [  2.37583215e-04,   4.59415986e-04,   6.07292643e-04]],

   [[  1.41795261e-03,  -1.62364401e-03,  -8.99673829e-04],

我想规范化这些数据,因为我需要在神经网络上下雨。我如何对 4D 数组进行标准化?我对图像有直觉。我可以规范化每个示例数据还是应该对整个 4D 数组进行规范化?

首先,是的,您可以进行标准化,这没有问题。

其次,4维数组没有什么特别之处。归一化应该简单地为每个特征单独执行。因此,根据归一化的类型,您应该计算训练集中所有样本中每个特征的最大值和最小值(或平均值和标准值)。

在您的情况下,您应该决定数据的哪些部分引用相同的分布。所以决定每个维度:

1) 第一维只是样本数,不做新的分布。将其视为数据条目数。

2) 时间步长。在这里您应该决定:x、y、z 值在 60​​ 个时间步长中的每个时间步长是否具有唯一分布?如果否,则按上一步相同的方式处理。如果是,则分别为每个时间步长计算以下特征的最大值、最小值(或平均值、标准差)。 (为了简单起见,想像在第 0 步的 arm 实际上可以具有与 30、60 相似的值吗?如果再次是,它们都对应于数据条目,否:x60 特征)

3) 左臂和右臂的 x,y,z 值是否不同?如果是,再次分别计算。 (我想是的,因为统计上左右臂在 space 中倾向于占据不同的点)

4) x,y,z值绝对独立分布,所以分开计算。

现在,如果您决定拥有 3 到 360 度之间的特征(取决于您的决定),那么计算它们的必要值(最大值、最小值或平均值、标准差)并执行标准例程。

希望对您有所帮助!

诀窍是使用 keepdims 设置为 True,这样就可以进行广播,而不会打扰我们扩展 dims 的内务处理工作。因此,处理通用维度数组的通用 ndarrays 的解决方案是 -

# Get min, max value aming all elements for each column
x_min = np.min(x, axis=tuple(range(x.ndim-1)), keepdims=1)
x_max = np.max(x, axis=tuple(range(x.ndim-1)), keepdims=1)

# Normalize with those min, max values leveraging broadcasting
out = (x - x_min)/ (x_max - x_min)