如何有效地规范4d numpy数组中的每个2d数组



我有一批ML任务的图像。图像呈[N,C,H,W]形状的数字阵列

N - number of images
C - chanels (in my case 1)
H - height
W - width

我想使用输入图像作为一种损失函数的激活映射。为此,我想使用以下公式在0和1之间单独归一化每个图像:

zi = (xi – min(x)) / (max(x) – min(x))

我想将每个图像单独规范化为其自己的最大值和最小值,而不是批量值。在批量保存图像的同时,最有效的方法是什么?

您可以使用amin(x, (1,2,3))获得C、H、W轴上的最小值/最大值。为了能够广播,你需要先转置,然后再转置:

((x.T - np.amin(x, (1,2,3))) / (np.amax(x, (1,2,3)) - np.amin(x, (1,2,3)))).T

示例:

import numpy as np
np.random.seed(0)
n = 5
c = 1
h = 2
w = 3
x = np.random.randint(0, 255, (n, c, h, w))

原始阵列x:

array([[[[172,  47, 117],
[192,  67, 251]]],

[[[195, 103,   9],
[211,  21, 242]]],

[[[ 36,  87,  70],
[216,  88, 140]]],

[[[ 58, 193, 230],
[ 39,  87, 174]]],

[[[ 88,  81, 165],
[ 25,  77,  72]]]])

规格化:

min = np.amin(x, (1,2,3))
max = np.amax(x, (1,2,3))
res = ((x.T - min) / (max - min)).T

结果:

array([[[[0.6127451 , 0.        , 0.34313725],
[0.71078431, 0.09803922, 1.        ]]],

[[[0.79828326, 0.40343348, 0.        ],
[0.86695279, 0.05150215, 1.        ]]],

[[[0.        , 0.28333333, 0.18888889],
[1.        , 0.28888889, 0.57777778]]],

[[[0.09947644, 0.80628272, 1.        ],
[0.        , 0.2513089 , 0.70680628]]],

[[[0.45      , 0.4       , 1.        ],
[0.        , 0.37142857, 0.33571429]]]])

最新更新