【问题标题】:How to min-max scale a 2d numpy array globally如何在全局范围内最小最大缩放二维 numpy 数组
【发布时间】:2022-08-18 22:37:15
【问题描述】:

对于我手头的更大任务,我有这个迷你示例:

from sklearn.preprocessing import minmax_scale

arr = np.array([[1,2,3],[4,5,6],[11,12,13]])
print(arr)

scaled_array = minmax_scale(arr, axis=0)

print(scaled_array)

输出是:

[[ 1  2  3]
 [ 4  5  6]
 [11 12 13]]
[[0.  0.  0. ]
 [0.3 0.3 0.3]
 [1.  1.  1. ]]

不幸的是,我只能让它按列或按行扩展到 (0,1)。我想让这个数组全局缩放。

所以我想要的输出是:

[[0.   0.08 0.16]
 [0.25 0.33 0.41]
 [0.83 0.91 1]]

除了全局检查最小值然后检查最大值然后为我的二维数组中的每个条目手动计算它之外,我该怎么做(我不想这样做,因为它不是对我手头的更大任务非常有效)?


编辑:

所以我写了我自己的函数来做到这一点:

min_value = np.amin(arr)
max_value = np.amax(arr)
arr = arr.astype(np.float64)

for x in np.nditer(arr, order=\'C\', op_flags=[\'readwrite\']):
    scaled_value = (x-min_value)/(max_value-min_value)
    x[...]=scaled_value

这确实产生了想要的结果。我仍然想知道是否有类似的方法minmax_scalesklearn.preprocessing那可能会做我想做的事。有人有想法吗?

    标签: arrays numpy scikit-learn normalization


    【解决方案1】:

    您可以将.minmax_scale 应用于扁平数组,然后将其重新整形为原始形状:

    minmax_scale(arr.flatten()).reshape(arr.shape)
    

    输出:

    array([[0.        , 0.08333333, 0.16666667],
           [0.25      , 0.33333333, 0.41666667],
           [0.83333333, 0.91666667, 1.        ]])
    

    【讨论】:

      猜你喜欢
      • 2019-03-05
      • 2018-07-27
      • 2021-05-11
      • 2014-06-28
      • 1970-01-01
      • 2021-01-29
      • 1970-01-01
      • 2016-06-21
      • 1970-01-01
      相关资源
      最近更新 更多