多维numpy数组的最小最大缩放

uinbv5nw  于 2022-12-29  发布在  其他
关注(0)|答案(3)|浏览(129)

如何以最有效的方式最小化最大归一化,一个XD-numpy数组的每个2D矩阵的“列”。
例如,对于3D阵列:

a = np.array([[[  0,  10],
        [ 20,  30]],

       [[ 40,  50],
        [ 60,  70]],

       [[ 80,  90],
        [100, 110]]])

转换为标准化数组:

b = np.array([[[0., 0.],
      [1., 1.]],
     [[0., 0.],
      [1., 1.]],
     [[0., 0.],
      [1., 1.]]])
camsedfj

camsedfj1#

a_min = a.min(axis=-2, keepdims=True)
a_max = a.max(axis=-2, keepdims=True)
out = (a - a_min) / (a_max - a_min)

输出:

array([[[0., 0.],
        [1., 1.]],

       [[0., 0.],
        [1., 1.]],

       [[0., 0.],
        [1., 1.]]])
m528fe3b

m528fe3b2#

sklearn.preprocessing.minmax_scale + numpy.apply_along_axis单次应用:

from sklearn.preprocessing import minmax_scale

a = np.array([[[0, 10], [20, 30]], [[40, 50], [60, 70]], [[80, 90], [100, 110]]])
a_scaled = np.apply_along_axis(minmax_scale, 1, a)
# a_scaled
[[[0. 0.]
  [1. 1.]]

 [[0. 0.]
  [1. 1.]]

 [[0. 0.]
  [1. 1.]]]
pjngdqdw

pjngdqdw3#

广播和简单列表理解

f= lambda ar:(ar==ar.max(axis=0)[None,:]).astype(int)
b = np.array([f(x) for x in a], dtype=float)
print(b)

输出

array([[[0., 0.],
        [1., 1.]],

       [[0., 0.],
        [1., 1.]],

       [[0., 0.],
        [1., 1.]]])

相关问题