代码之家  ›  专栏  ›  技术社区  ›  Naman

重塑4D/5D阵列的提示或模式(视频到帧)

  •  1
  • Naman  · 技术社区  · 6 年前

    我发现很难想象在numpy/pytorch中重塑4d5d数组。(我假设两者都以类似的模式重塑,我目前正在使用pytorch!).

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

    ( num个视频 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]

    1 回复  |  直到 6 年前
        1
  •  3
  •   Divakar    6 年前

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

    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 .