Numpy 将批处理矩阵(3d阵列,每个矩阵都是图像)重塑为2d(图像网格)

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

假设我们有一个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()

有两个简单的解决方案。您的及其“转置”:

例如:

>>> 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,明白了,我愿意接受你的解决方案,谢谢