重感情的大象 · Sqlite3查询指定行数数据_studio ...· 3 周前 · |
淡定的板凳 · 安卓奇葩问题之:设置webView超时 - ...· 4 月前 · |
大方的烤面包 · VScode错误:无法读取未定义属性(读取' ...· 6 月前 · |
眼睛小的香瓜 · pyautogui无法输入中文 - ...· 1 年前 · |
狂野的风衣 · 使用HTML键调用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)])