![]() |
发呆的皮带 · Windows Hello ...· 1 年前 · |
![]() |
打盹的桔子 · C/C++ 获取环境变量的值_c ...· 1 年前 · |
![]() |
帅呆的金鱼 · javascript - ...· 1 年前 · |
![]() |
豁达的企鹅 · C++编写一个简单的DLL - ...· 1 年前 · |
![]() |
茫然的茶叶 · javascript - ...· 1 年前 · |
在对音频或图像数组进行一些处理后,需要在一定范围内进行归一化,然后才能将其写回文件。这可以像这样做:
# 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()
似乎与此无关。
您可以使用"i“(如idiv,imul..)版本,而且看起来还不错:
image /= (image.max()/255.0)
对于另一种情况,您可以编写一个函数来按列规范化n维数组:
def normalize_columns(arr):
rows, cols = arr.shape
for col in xrange(cols):
arr[:,col] /= abs(arr[:,col]).max()
也可以使用
sklearn
重新缩放。优点是,除了以数据为中心进行均值调整外,您还可以调整归一化标准差,并且可以在任一轴上、按要素或按记录执行此操作。
from sklearn.preprocessing import scale
X = scale( X, axis=0, with_mean=True, with_std=True, copy=True )
关键字参数
axis
、
with_mean
和
with_std
是自解释的,并以其默认状态显示。如果参数
copy
设置为
False
,则它将就地执行操作。文档
here
。
如果数组同时包含正数据和负数据,我会使用:
import numpy as np
a = np.random.rand(3,2)
# Normalised [0,1]
b = (a - np.min(a))/np.ptp(a)
# Normalised [0,255] as integer: don't forget the parenthesis before astype(int)
c = (255*(a - np.min(a))/np.ptp(a)).astype(int)
# Normalised [-1,1]
d = 2.*(a - np.min(a))/np.ptp(a)-1
如果数组包含
nan
,一种解决方案可能是将它们删除,如下所示:
def nan_ptp(a):
return np.ptp(a[np.isfinite(a)])