如何规范化numpy数组中的子数组

时间:2017-09-28 15:56:54

标签: python numpy

我有一个numpy数组data的形状:[128,64,64,64],我想知道将128个切片中的每个切片标准化为范围[0.0,1.0]的最佳方法是什么。我明白我可以使用np.max(data [0,...]),np.max(data [1,...])... np.max(data [127,...])来计算每个切片中的最大值,但想知道我是否可以更有效地做到这一点。

基本上是这样的:

data_min = np.min(data[:,...])
data_max = np.max(data[:,...])
norm_data = (data[:,...] - data_min)/(data_max - data_min)

结果应该仍然有形[128,64,64,64] 但我还没弄清楚使用哪种特定的最小/最大函数和选项来获得结果。

请指教。 谢谢!

2 个答案:

答案 0 :(得分:2)

获取最小值和最大值,同时保留尺寸,以便在我们使用标准化公式来标准化输入数据时使用broadcasting来帮助我们,就像这样 -

mins = data.min(axis=(1,2,3), keepdims=True)
maxs = data.max(axis=(1,2,3), keepdims=True)
norm_data = (data-mins)/(maxs-mins)

答案 1 :(得分:0)

您可以使用np.vectorize在数组的所有元素上应用函数:

def norm(element):
    return (element - data_min) / (data_max - data_min)

ndnorm = np.vectorize(norm)

data_min = data.min()
data_max = data.max()

norm_data = ndnorm(data)