我在将4D numpy数组重塑为2D numpy数组时遇到了一些麻烦。目前numpy数组如下(35280L,1L,32L,32L)。格式是图像数量,通道,宽度,高度。基本上,我有35280个32x32的图像块,我想组合图像块(保持索引)来创建一个大图像。
答案 0 :(得分:1)
你有一个这样的数组:
images = np.random.randint(0,256,(35280, 1, 32, 32))
你需要的第一件事是弄清楚(不知何故)最终图像的宽度应该是什么。让我们说这个例子是(441 * 32, 80 * 32)
。
然后你可以这样做:
image = images.swapaxes(0,2).reshape((441 * 32, -1))
这几乎可以为您提供所需的内容,除了行是交错的,因此您拥有:
AAABBBCCC
DDDEEEFFF
GGGHHHIII
AAABBBCCC
DDDEEEFFF
GGGHHHIII
然后,您可以使用“花式索引”来重新排列行:
image[np.array([0,3,1,4,2,5])]
现在你有:
AAABBBCCC
AAABBBCCC
DDDEEEFFF
DDDEEEFFF
GGGHHHIII
GGGHHHIII
我将作为练习留下您生成花哨索引序列的部分。
答案 1 :(得分:1)
重塑是不够的,您必须使用swapaxes
仔细重新排列数据。
示例数据:
dims=nbim,_,h,w=np.array([6,1,7,6])
data=arange(dims.prod()).reshape(dims)%256
图片:
figure()
for i in range(nbim):
subplot(1,nbim,i+1)
imshow(data[i,0],vmin=0,vmax=255)
和大图:
#number of images in each dim :
nh = 2 # a choice
nw=nbim // nh
bigim=data.reshape(nh,nw,h,w).swapaxes(1,2).reshape(nh*h,nw*w)
figure()
imshow(bigim)