Учитывая ndarray формы (batch_size, w, h, c) и размера патча (p, p), я хочу извлечь патчи из каждой трехмерной матрицы (то есть формы (p, p, c). Никаких патчей будет перекрывать, поэтому шаг можно рассматривать как p.
Это должно вернуть массив с (batch_size * p * p, p, p, c)
Использование skimage.view_as_windows вот минимальный пример
import numpy as np
import skimage
a = np.arange(8*8*2).reshape((8, 8, 2))
b = a * 2
c = np.concatenate((a[np.newaxis, :, :, :], b[np.newaxis, :, :, :]), axis = 0)
d = skimage.util.view_as_windows(c, 2, step = 2).reshape((8*2*2, 2, 2, 2))
Однако я ожидаю только альтернативные значения:
d[0]
Out[183]:
array([[[ 0, 1],
[ 2, 3]],
[[16, 17],
[18, 19]]])
d[1]
Out[184]:
array([[[ 0, 2],
[ 4, 6]],
[[32, 34],
[36, 38]]])
d[2]
Out[185]:
array([[[ 4, 5],
[ 6, 7]],
[[20, 21],
[22, 23]]])
d[3]
Out[186]:
array([[[ 8, 10],
[12, 14]],
[[40, 42],
[44, 46]]])
d[4]
Out[187]:
array([[[ 8, 9],
[10, 11]],
[[24, 25],
[26, 27]]])
Таким образом, d[::2]
близко к моему решению, но половина значений потеряна
Я не уверен, является ли проблема размером окна или шагом, или даже если моя проблема возможна с помощью view_as_windows
, поэтому я открыт для любого эффективного предложения.