Использование моего window_nd
рецепта от здесь
def sample_nd(arr, window_shape, axis, k = 1):
windows = window_nd(arr, window = window_shape, axis = axis)
windows = windows.reshape((-1,) + windows.shape[len(axis):])
index = np.random.randint(0, windows.shape[0], k)
return windows[index].squeeze()
sample_nd(np_3D_array, window_shape = (1, 3), axis = (0, 1), k = 8).shape
(8, 3, 4)
Для ясности, здесь не учитывается множество крайних случаев, которые присутствуют в исходной функции (особенно если она не работает)только с одним окном / осью, если они не отформатированы как кортежи).