Python 如何规范化numpy阵列中的子阵列

Python 如何规范化numpy阵列中的子阵列,python,numpy,Python,Numpy,我有一个numpy数组data的形状:[128,64,64,64],我想知道将128个切片中的每一个归一化为[0.0,1.0]范围的最佳方法是什么。我知道我可以使用np.max(数据[0,…]),np.max(数据[1,…])。。。max(data[127,…])来计算每个切片中的最大值,但不知道我是否可以更有效地完成这项工作 基本上是这样的: data_min = np.min(data[:,...]) data_max = np.max(data[:,...]) norm_data = (d

我有一个numpy数组
data
的形状:[128,64,64,64],我想知道将128个切片中的每一个归一化为[0.0,1.0]范围的最佳方法是什么。我知道我可以使用np.max(数据[0,…]),np.max(数据[1,…])。。。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] 但我还没有弄清楚使用哪种特定的最小/最大函数和选项来获得结果

请告知。
谢谢

获取最小值和最大值,同时保留维度,以帮助我们以后使用这些维度使用规范化公式规范化输入数据,如下所示-

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

您可以使用
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)

但是最初的形状是
[128,64,64,64]
?刚刚纠正了它。这似乎规范化了整个数据阵列,而我想沿着第一维度规范化每个子阵列,如问题中所示:数据[0,…],然后是数据[1,…]等等。如何相应地更改?酷~!现在可以用了。”在这种情况下,keepdims似乎至关重要。谢谢你介意重写这个来规范化第一维度上的子数组吗?有兴趣了解vectorize()如何工作有关
np.vectorize
的信息可以在中轻松找到。要沿第一维度规格化每个子阵列,可以在for循环中对每个子阵列应用相同的函数。要在一行中执行此操作,请将
data\u min
data\u max
添加到
norm
和:
norm\u data=np.array([ndnorm(subar,subar.min(),subar.max())的参数中([ndnorm(subar,subar.min(),subar.max())表示数据中的subar])