Не удалось передать входной массив из формы (2,2,3) в форму (224,224,3) — извлечение блоков из массива NumPy

#python #arrays #numpy #patch

#питон #массивы #тупица #заплатка

Вопрос:

Я пытаюсь создать несколько патчей с указанным размером — 1800, 224, 224, 3 — из растрового изображения (1, 4646, 4827, 3) с помощью следующего кода:

 import numpy as np  image = images_final tiles = np.zeros((1400, 224, 224, 3))  c = 0  for i in range(0, image.shape[1], 2):   for j in range(0, image.shape[2], 2):   tiles[c] = image[:, i:i 2, j:j 2]  c  = 1  

Однако я продолжаю получать следующее сообщение: Ошибка значения: не удалось передать входной массив из формы (2,2,3) в форму (224,224,3).

Я также попробовал следующий код:

 def for_loop_split(image: np.ndarray, kernel_size: tuple): img_height, img_width, channels = image.shape tile_height, tile_width = kernel_size  tiled_array = np.zeros ((img_height // tile_height,  img_width // tile_width,  tile_height,  tile_width,  channels))  y = x = 0  for i in range(0, img_height, tile_height):  for j in range (0,img_width,tile_width):  tiled_array[y][x] = image[i:i tile_height,  j:j tile_width,  :channels]  x  = 1  y  = 1  x = 0   return tiled_array   patches = stride_split(img,tilesize)  

НО результат таков (20, 21, 224, 224, 3), и мне нужно, чтобы это было количество патчей x 224 x 224 x 3, последнее соответствует каналам растра.

Я знаю, что существует несколько решений для одной и той же ошибки, но они неприменимы к моей конкретной проблеме. Может ли кто-нибудь помочь мне с этим?

Комментарии:

1. patches = patches.reshape(-1, *patches.shape[2:])

2. Исправьте отступы и использование имени функции. Функция (не ваша?) явно создает массив 5d. Прочтите np.zeros вызов и x,y сделайте двойной цикл.