我发现在numpy / pytorch中可视化重塑4D 5D阵列真的很难。 (我假设两个都重塑了类似的模式,我目前正在使用pytorch!)。
就像假设我的视频尺寸为[N x C x D x H x W]
( num videos = x 频道视频 x 制作视频 x 高度视频 x 宽度视频 )
假设我想将视频整形为[N x C x H x W],我应该如何进行重塑。
简单应用x = x.reshape(N*D, C, H, W)
实际上并没有这样做,它会给出错误的元素顺序。
你能帮助我解决这个问题,以及你使用过的模式的直觉吗?
在旁注中,如果我有一个视频(即假设1x3x100x256x256我使用:
以下代码方法:
x = x.squeeze(0).T.reshape((100,3,256,256))[:,:,None,:,:]
并且有效大。无法找出超过1个视频。
谢谢!
根据要求:
input = np.random.randn(N,C,D,H,W)
output = np.zeros((N*D,C,H,W))
根据请求,基于for循环的代码显示我想要的内容
for h in range(N):
for i in range(D):
for j in range(C):
for k in range(H):
for l in range(W):
output[h*D + i,j,k,l] = input[h,j,i,k,l]
答案 0 :(得分:3)
只需交换第二个和第三个轴,然后将新的第二个轴(旧的第三个轴)与第一个轴合并并重新整形 -
output = input_array.swapaxes(1,2).reshape(N*D,C,H,W)
我们也可以使用transpose
:input_array.transpose(0,2,1,3,4)
来获得相同的交换轴效果。
有关一般的直观方法,请参阅Intuition and idea behind reshaping 4D array to 2D array in NumPy。