重塑 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)
来获得相同的交换轴效果。
一般直观的方法请参考。
我发现很难想象在 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 worksgreat. 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)
来获得相同的交换轴效果。
一般直观的方法请参考