изменить матрицу партии (3d-массив, каждая матрица является изображением) в 2d (сетка изображений) - PullRequest
1 голос
/ 16 марта 2019

Допустим, у нас есть 3d-массив A.shape = (100, 5, 5), каждая маленькая матрица (5,5) является изображением, теперь я хочу преобразовать этот 3d-массив в квадратную сетку изображений B.shape=(50,50), чтобы изображения выкладывались как 10 * 10 сетка.

Я мог бы сделать это с помощью np.stack инструментов, но мне интересно, возможно ли это сделать с помощью np.einsum?

Ответы [ 2 ]

1 голос
/ 16 марта 2019

Есть два простых решения.Ваше и его "транспонирование":

Пример:

>>> ABCD.shape
(4, 41, 27)
>>> AC_BD = np.einsum('jik', ABCD.reshape(2, 82, 27)).reshape(82, 54)
>>> AB_CD = np.einsum('ikjl', ABCD.reshape(2, 2, 41, 27)).reshape(82, 54)
>>> Image.fromarray(AC_BD).show()
>>> Image.fromarray(AB_CD).show()

enter image description here enter image description here

1 голос
/ 16 марта 2019

О, я думаю, я только что понял, как

A = np.einsum('ijk->jik', A.reshape(10,50,5)).reshape(50,50); 
pl.imshow(A); 
pl.show()
...