Выполните сокращения ufunc (среднее, стандартное отклонение) вдоль второй и третьей осей, сохраняя тем самым тусклые цвета, которые помогут в broadcasting
позже с шагом деления -
mean = np.mean(rgb_images, axis=(1,2), keepdims=True)
std = np.std(rgb_images, axis=(1,2), keepdims=True)
standardized_images_out = (rgb_images - mean) / std
Повышение производительности за счет повторного использования средних значений для вычисления стандартного отклонения в соответствии с его формулой и, следовательно, на основе this solution
, например:
std = np.sqrt(((rgb_images - mean)**2).mean((1,2), keepdims=True))
Упаковка в функцию с осями для сокращений в качестве параметра, мы бы получили -
from __future__ import division
def normalize_meanstd(a, axis=None):
# axis param denotes axes along which mean & std reductions are to be performed
mean = np.mean(a, axis=axis, keepdims=True)
std = np.sqrt(((a - mean)**2).mean(axis=axis, keepdims=True))
return (a - mean) / std
standardized_images = normalize_meanstd(rgb_images, axis=(1,2))