开发者社区 问答 正文

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

在对音频或图像阵列进行一些处理之后,需要先在一定范围内对其进行标准化,然后才能将其写回到文件中。可以这样完成:

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()似乎无关。 问题来源于stack overflow

展开
收起
保持可爱mmm 2020-02-07 22:55:08 1041 分享 版权
1 条回答
写回答
取消 提交回答
  • 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 由于我们在这里使用基本的numpy方法,因此我认为这是尽可能有效的numpy解决方案。

    就地操作不会更改容器数组的dtype。由于所需的规范化值是浮点型,因此在执行就地操作之前,audioand image数组必须具有浮点dtype。如果它们还不是浮点dtype,则需要使用进行转换astype。例如,

    image = image.astype('float64')

    2020-02-07 22:55:21
    赞同 展开评论
问答分类:
问答标签:
问答地址: