Разделить массив numpy 3-й в 2-й массив меньших 3-х массивов - PullRequest
0 голосов
/ 23 апреля 2020

В настоящее время у меня есть изображения в виде массива numpy с 3 каналами (RGB). Я хотел бы эффективно разделить это на 2-й массив меньших 3-мерных подмассивов. Например, если мое изображение имеет форму (100, 100, 3), я хочу преобразовать его в массив 10 x 10, где элементы являются (10, 10, 3) изображениями (подизображениями), сохраняя пространственную ориентацию. Высота и ширина изображения всегда будут равны.

Я также sh переверну всю операцию.

Если это сложно сделать, есть ли способ конвертировать его? в 4-й массив в порядке строк или столбцов, в то время как элемент все тот же?

Есть ли эффективный способ сделать это, используя numpy методы?

1 Ответ

0 голосов
/ 23 апреля 2020

Вы можете использовать шаги для разделения массива:

image = np.arange(30000).reshape(100,100,3)

sub_shape = (10,10,3)

#divide the matrix into sub_matrices of subshape
view_shape = tuple(np.subtract(image.shape, sub_shape) + 1) + sub_shape
strides = image.strides + image.strides
sub_matrices = np.squeeze(np.lib.stride_tricks.as_strided(image,view_shape,strides)[::sub_shape[0],::sub_shape[1],:])

sub_matrices shape:

(10, 10, 10, 10, 3)

sub_matrices[i,j,:,:,:] - это [i,j] -й подмассив.

В качестве альтернативы вы можете изменить форму своего изображения:

sub_shape = (10,10,3)
sub_matrices = np.swapaxes(image.reshape(image.shape[0]/sub_shape[0],sub_shape[0],image.shape[1]/sub_shape[1],sub_shape[1],image.shape[3]), 1, 2)

И снова sub_matrices[i,j,:,:,:] - это [i,j] -й подмассив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...