При условии, что ваше изображение является трехмерным массивом, view_as_windows
дает 6-мерный массив. Если вы хотите вычислить среднее значение каждого окна, используя векторизованный код, а не через циклы for
, вам просто нужно передать последние три оси в mean
NumPy следующим образом:
In [18]: img = np.ones((4, 6, 6))
In [19]: windows = view_as_windows(image, window_shape=(4, 3, 3), step=1)
In [20]: windows.shape
Out[20]: (1, 4, 4, 4, 3, 3)
In [21]: avg = np.mean(windows, axis=(-1, -2, -3))
In [22]: avg.shape
Out[22]: (1, 4, 4)
In [23]: avg
Out[23]:
array([[[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.],
[1., 1., 1., 1.]]])
Описание параметра axis
из документов :
ось: Нет или int или кортеж целых чисел, необязательно
Ось или оси, по которым вычисляются средние значения. По умолчанию вычисляется среднее значение уплощенного массива.
Новое в версии 1.7.0.
Если это кортеж целых чисел, среднее значение выполняется по нескольким осям, а не по одной оси или по всем осям, как раньше.