簡體   English   中英

將4D numpy數組重塑為3D

[英]Reshape 4D numpy array into 3D

我有一個具有以下尺寸的numpy數組-(256、128、4、200)-基本上前兩個可以形成圖像,第三個是通道,第四個是幀(“時間實例”)。 如何重整數組的形狀,使框架彼此“堆疊”,換句話說,數組的形狀為(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)

np.transpose和重塑軸-

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

roll-axis和重塑-

data_new = np.rollaxis(data,3,1).reshape(m,-1,n)

運行時測試-

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+加速是矢量化的利潤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM