Numpy 将批处理矩阵(3d阵列,每个矩阵都是图像)重塑为2d(图像网格)
假设我们有一个3d数组Numpy 将批处理矩阵(3d阵列,每个矩阵都是图像)重塑为2d(图像网格),numpy,numpy-einsum,Numpy,Numpy Einsum,假设我们有一个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); p
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()
有两个简单的解决方案。您的及其“转置”: 例如:
>>> 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()
更简单:
A.reforme(10,10,5,5)。swapaxes(1,2)。reforme(50,50)
或np.einsum('ikjl',A.reforme(10,10,5,5))。reforme(50,50)
@PaulPanzer,第二个更有趣,你所说的einsum('ikjl',…)
?“ikjl”是“ikjl”的缩写,即按字母顺序排列的目标。顺便说一句。编辑后,这不再等同于您的结果。图像的排列是换位的。@PaulPanzer,明白了,我愿意接受你的解决方案,谢谢