如何将NumPy数组规范化到一定范围内?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (65)

在对音频或图像数组进行一些处理之后,需要在一个范围内将其标准化,然后才能将其写回文件。可以这样做:

# Normalize audio channels to between -1.0 and +1.0
audio[:,0] = audio[:,0]/abs(audio[:,0]).max()
audio[:,1] = audio[:,1]/abs(audio[:,1]).max()

# Normalize image to between 0 and 255
image = image/(image.max()/255.0)

有没有一种不那么冗长,方便的函数方式来做这件事呢?matplotlib.colors.Normalize()似乎与此无关。

提问于
用户回答回答于
audio /= np.max(np.abs(audio),axis=0)
image *= (255.0/image.max())

使用/=*=允许您消除中间临时数组,从而节省一些内存。乘法比除法快:

image *= 255.0/image.max()    # Uses 1 division and image.size multiplications

image /= image.max()/255.0    # Uses 1+image.size divisions

更快

用户回答回答于

您也可以使用sklearn。其优点是,除了对数据进行均值中心化之外,还可以调整标准偏差的规范化,并且可以在任意轴、特性或记录上进行调整。

from sklearn.preprocessing import scale
X = scale( X, axis=0, with_mean=True, with_std=True, copy=True )

关键字参数axiswith_meanwith_std都是不言自明的,并显示在默认状态中。

扫码关注云+社区