#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
сделайте двойной цикл.