我有一个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] 但我还没弄清楚使用哪种特定的最小/最大函数和选项来获得结果。
请指教。 谢谢!
答案 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)