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

Numpy 重塑4D/5D阵列的技巧或模式(从视频到帧),numpy,reshape,pytorch,Numpy,Reshape,Pytorch,我发现在numpy/pytorch中重塑4D 5D阵列非常困难。(我假设两者都以相似的模式重塑,我目前正在使用pytorch!) 假设我有维度为[N x C x D x H x W]的视频 (num视频x频道视频x帧视频x高度视频x宽度视频) 假设我想将视频重塑为[nxcxhxw]帧,我应该如何进行重塑 简单地应用x=x.reformate(N*D,C,H,W)实际上不起作用,它给出了错误的元素顺序 你能帮助我如何做到这一点,以及你所使用的模式的任何细微的直觉吗 在旁注中,如果我有一个视频(即假

我发现在numpy/pytorch中重塑4D 5D阵列非常困难。(我假设两者都以相似的模式重塑,我目前正在使用pytorch!)

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

num视频x频道视频x帧视频x高度视频x宽度视频

假设我想将视频重塑为[nxcxhxw]帧,我应该如何进行重塑

简单地应用
x=x.reformate(N*D,C,H,W)
实际上不起作用,它给出了错误的元素顺序

你能帮助我如何做到这一点,以及你所使用的模式的任何细微的直觉吗

在旁注中,如果我有一个视频(即假设1x3x100x256i使用:

以下代码方法:

x=x.squence(0).T.restrape((100,3256256))[:,:,None,:,:]
它可以工作

太好了。无法计算超过1个视频

谢谢

根据要求:

input = np.random.randn(N,C,D,H,W)
output = np.zeros((N*D,C,H,W))
根据请求,使用基于for循环的代码来显示我想要的内容

对于范围(N)内的h:
对于范围(D)中的i:
对于范围(C)内的j:
对于范围(H)内的k:
对于范围(W)中的l:
输出[h*D+i,j,k,l]=输入[h,j,i,k,l]

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

output = input_array.swapaxes(1,2).reshape(N*D,C,H,W)
我们还可以使用
transpose
input\u array.transpose(0,2,1,3,4)
获得相同的交换轴效果


对于一般直观的方法,请参考。

您能显示一个工作循环代码吗?可能使用
x.squence(0).T.reformate((100,3256256))[:,:,None,:,:]
存储到输出数组中?啊,你的意思是通过for loops重塑?是的,一个使用循环的工作解决方案代码,只是为了让我们有一个参考来使用。@Divakar在这里:),在索引方面可能有点不正确,将进行检查,但在这种操作5D到4D中,你会得到我想要的结果,重塑我应该排列轴,使它们相邻,然后重塑?我也想过,但我只是不直观地得到它,就像需要检查虚拟值。任何你知道的有帮助的东西,或任何直觉或一些参考(对于高维数组操作)看起来史诗般的东西!谢谢,正是我想要的:)