将4D numpy阵列重塑为3D

2024-03-29 12:02:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个numpy数组,其维数如下(256、128、4200)-基本上前两个可以形成图像,第三个是通道,第四个是帧(“时间实例”)。如何重塑数组,使帧一个接一个地“堆叠”,换句话说,数组的形状是(256,128*200,4)?重要的是,连接是按帧顺序进行的,因此帧中的值的顺序将保持不变。在

本质上,我们需要优化:

data_new = data[:, :, :, 0]
for i in range(1, data.shape[3]):
    data_new = np.concatenate((data_new, data[:, :, :, i]), axis=1)

Tags: 实例in图像numpynewfordata顺序
1条回答
网友
1楼 · 发布于 2024-03-29 12:02:22

^{}置换轴并重塑-

m,n = data.shape[::2]
data_new = data.transpose(0,3,1,2).reshape(m,-1,n)

或者roll-axis并重塑-

^{pr2}$

运行时测试-

In [40]: data = np.random.randint(0,9,(256,128,4,200))

In [46]: %%timeit
    ...: data_new = data[:, :, :, 0]
    ...: for i in range(1, data.shape[3]):
    ...:     data_new = np.concatenate((data_new, data[:, :, :, i]), axis=1)
    ...: 
1 loop, best of 3: 3.56 s per loop

In [49]: m,n = data.shape[::2]

In [50]: %timeit data.transpose(0,3,1,2).reshape(m,-1,n)
10 loops, best of 3: 47.1 ms per loop

In [51]: %timeit np.rollaxis(data,3,1).reshape(m,-1,n)
10 loops, best of 3: 46.8 ms per loop

因此,76x+加速是矢量化利润。在

相关问题 更多 >