繁体   English   中英

3D numpy 数组 MinMax 归一化

[英]3D numpy array MinMax Normalization

我想 MinMax 规范化以下 3D numpy 数组“在 2D 层级别”:

np.array([[[0, 1, 2],
           [3, 4, 5],
           [6, 7, 8]],
          [[0, 1, 2],
           [3, 4, 5],
           [6, 7, 10]],
          [[0, 1, 2],
           [3, 4, 5],
           [6, 7, 12]]])

获得:

np.array([[[0. , 0.1, 0.2],
           [0.3, 0.4, 0.5],
           [0.6, 0.7, 1. ]],
          [[0. , 0.1, 0.2],
           [0.3, 0.4, 0.5],
           [0.6, 0.7, 1. ]],
          [[0.        , 0.08333333, 0.16666667],
           [0.25      , 0.33333333, 0.41666667],
           [0.5       , 0.58333333, 1.        ]]])

知道如何在不使用循环的情况下完成吗? 提前谢谢了 !

一种方法是按如下方式使用.max

res = arr / arr.max(axis=(1, 2), keepdims=True)
print(res)

Output

[[[0.125      0.125      0.25      ]
  [0.375      0.5        0.625     ]
  [0.75       0.875      1.        ]]

 [[0.         0.1        0.2       ]
  [0.3        0.4        0.5       ]
  [0.6        0.7        1.        ]]

 [[0.         0.08333333 0.16666667]
  [0.25       0.33333333 0.41666667]
  [0.5        0.58333333 1.        ]]]

如果您将数组定义为:

x = np.array([[[0, 1, 2],
           [3, 4, 5],
           [6, 7, 8]],
          [[0, 1, 2],
           [3, 4, 5],
           [6, 7, 10]],
          [[0, 1, 2],
           [3, 4, 5],
           [6, 7, 12]]])

您可以使用 reshape 来展平数组:

(
    x.reshape(x.shape[-1],x.shape[0]*x.shape[1]).T / 
    np.max(x.reshape(x.shape[2], x.shape[0]*x.shape[1]), axis=1)
).T.reshape(x.shape)

这里数组被展平为二维数组,其中可以取轴的最大值 = 1。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM