python中Numpy库的ravel()函数解说和应用
1.说明
python 中的 ravel() 函数将数组多维度拉成一维数组。
ravel 英文译为散开,解开; flatten 英文译为变平。 两者的区别在于返回拷贝(copy)还是返回视图(view), numpy.ravel() 返回的是视图,会影响原始矩阵;numpy.flatten() 返回的是拷贝,对拷贝所做的修改不会影响原始矩阵。
2.应用
例如归一化图片信息统计
for img_list in [img_list_1440, img_list_576]: imgs = np.concatenate(img_list, axis=-1) imgs = imgs.astype(np.float32) / 255. for i in tqdm(range(3)): pixels = imgs[:, :, i, :].ravel() means[i] += float(np.mean(pixels)) stdevs[i] += float(np.std(pixels)) # mean=[0.46157165, 0.46698335, 0.46580717] # std=[0.28069802, 0.28096266, 0.28323689])
归一化需要的mean和std得到后,即可方便后续使用,例如数据集定义阶段归一化:
# 准备数据集 import paddlex as pdx from paddlex import transforms as T train_transforms = T.Compose([ T.MixupImage(mixup_epoch=-1), T.RandomDistort(), T.RandomExpand(im_padding_value=[123.675, 116.28, 103.53]), T.RandomCrop(), T.RandomHorizontalFlip(), T.BatchRandomResize( target_sizes=[320, 352, 384, 416, 448, 480, 512, 544, 576, 608], interp="RANDOM"), T.Normalize( mean=[0.46157165, 0.46698335, 0.46580717], std=[0.28069802, 0.28096266, 0.28323689]) ]) eval_transforms = T.Compose([ T.Resize( target_size=608, interp="CUBIC"), T.Normalize( mean=[0.46157165, 0.46698335, 0.46580717], std=[0.28069802, 0.28096266, 0.28323689])