Вы можете использовать np.vsplit
, чтобы разбить массив на несколько подмассивов по вертикали. Точно так же вы можете использовать np.hsplit , чтобы разбить массив на несколько подмассивов по горизонтали. Чтобы лучше понять это, рассмотрим обобщенную функцию resample
, которая использует методы np.vsplit
и np.hsplit
.
Используйте это:
def ressample(arr, N):
A = []
for v in np.vsplit(arr, arr.shape[0] // N):
A.extend([*np.hsplit(v, arr.shape[0] // N)])
return np.array(A)
Пример 1: Данный 2D-массив имеет форму 4x4, и мы хотим выделить его на куски формы 2x2.
arr = np.array([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]])
print(ressample(arr, 2)) #--> chunk size 2
Выход 1:
[[[ 1 2]
[ 5 6]]
[[ 3 4]
[ 7 8]]
[[ 9 10]
[13 14]]
[[11 12]
[15 16]]]
Пример 2: Рассмотрим, что данный двумерный массив содержит 8 строк и 8 столбцов. Теперь мы подвыбор этого массива в куски формы 4x4.
arr = np.random.randint(0, 10, 64).reshape(8, 8)
print(ressample(arr, 4)) #--> chunck size 4
Пример вывода 2:
[[[8 3 7 5]
[7 2 6 1]
[7 9 2 2]
[3 1 8 8]]
[[2 0 3 2]
[2 9 0 8]
[2 6 3 9]
[2 4 4 8]]
[[9 9 1 8]
[9 1 5 0]
[8 5 1 2]
[2 7 5 1]]
[[7 8 9 6]
[9 0 9 5]
[8 9 8 3]
[7 3 6 3]]]