【问题标题】:Tips or patterns for reshaping 4D/5D arrays, (videos to frames)重塑 4D/5D 阵列的技巧或模式,(视频到帧)
【发布时间】:2018-11-03 06:56:18
【问题描述】:

我发现很难在 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) 实际上并没有这样做,它给出了错误的元素顺序。

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

在旁注中,如果我有一个视频(即假设我使用 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]

【问题讨论】:

  • 你能展示一个有效的循环代码吗?也许使用 x.squeeze(0).T.reshape((100,3,256,256))[:,:,None,:,:] 存储到输出数组中?
  • 啊,你的意思是通过 for 循环重塑??
  • 是的,一个使用循环的工作解决方案代码,只是为了让我们有一个参考。
  • @Divakar 给你 :),索引可能有点不正确,会检查,但你会得到我想要的

标签: numpy reshape pytorch


【解决方案1】:

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

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

【讨论】:

  • 所以在这种 5D 到 4D 的操作中,我应该对轴进行置换以使它们相邻,然后再整形?
  • 我也想过,但我只是没有直观地理解它,比如需要检查虚拟值。任何你知道的有帮助的东西或任何直觉或一些参考资料(用于高维数组操作)
  • 这看起来很史诗!谢谢,正是我想要的:)
猜你喜欢
  • 1970-01-01
  • 2023-01-25
  • 1970-01-01
  • 1970-01-01
  • 2011-04-08
  • 2021-08-31
  • 2013-02-18
  • 2020-08-03
  • 1970-01-01
相关资源
最近更新 更多