重塑 4D/5D 阵列的技巧或模式,(视频到帧)

Tips or patterns for reshaping 4D/5D arrays, (videos to frames)

我发现很难想象在 numpy/pytorch 中重塑 4D 5D 阵列。 (我假设两者都以类似的方式重塑,我目前正在使用 pytorch!)。

假设我有尺寸为 [N x C x D x H x W] 的视频

(视频数量 x 频道视频 x 帧视频 x 高度视频 x 宽度视频)

假设我想将视频整形为 [N x C x H x W] 帧,我应该如何进行整形。

简单应用 x = x.reshape(N*D, C, H, W) 实际上并没有做到,它给出了错误的元素顺序。

你能帮我解决这个问题吗?你对模式有什么直觉吗?

On a sidenote, if i have one video (i.e suppose 1x3x100x256x256 I use :

the following code approach:

x = x.squeeze(0).T.reshape((100,3,256,256))[:,:,None,:,:] and it works

great. Couldnt figure out for more than 1 video.

谢谢!

根据要求:

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]

只需交换第二个和第三个轴,然后将新的第二个轴(旧的第三个)与第一个轴合并并进行整形 -

output = input_array.swapaxes(1,2).reshape(N*D,C,H,W)

我们也可以使用 transpose : input_array.transpose(0,2,1,3,4) 来获得相同的交换轴效果。

一般直观的方法请参考