将批处理矩阵(3d 数组,每个矩阵是一个图像)重塑为 2d(图像网格)
reshape batch matrices (3d array, each matrix is an image) to 2d (a grid of images)
假设我们有一个 3d 数组 A.shape = (100, 5, 5)
,每个小矩阵 (5,5)
是一个图像,现在我想将这个 3d 数组重塑为图像的正方形网格 B.shape=(50,50)
,这样图像就会被布置成 10*10 的网格。
我可以使用 np.stack
类工具来完成此操作,但我想知道是否可以使用 np.einsum
来完成此操作?
哦,我想我刚刚想通了
A = np.einsum('ijk->jik', A.reshape(10,50,5)).reshape(50,50);
pl.imshow(A);
pl.show()
有两个简单的解决方案。你的和它的 "transpose":
示例:
>>> 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()
假设我们有一个 3d 数组 A.shape = (100, 5, 5)
,每个小矩阵 (5,5)
是一个图像,现在我想将这个 3d 数组重塑为图像的正方形网格 B.shape=(50,50)
,这样图像就会被布置成 10*10 的网格。
我可以使用 np.stack
类工具来完成此操作,但我想知道是否可以使用 np.einsum
来完成此操作?
哦,我想我刚刚想通了
A = np.einsum('ijk->jik', A.reshape(10,50,5)).reshape(50,50);
pl.imshow(A);
pl.show()
有两个简单的解决方案。你的和它的 "transpose":
示例:
>>> 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()