簡體   English   中英

將三維ndarray重塑為二維

[英]Reshaping a three-dimensional ndarray into two dimensions

我有一個三維數組(形狀是2,2,3),它可以被認為是兩個二維數組的組合。 我想得到這兩個陣列並將它們放在一起。 這是我的出發點:

test1 = np.ndarray((2,2,3))
test1[0] = np.array([[1,2,3],
                     [4,5,6]])
test1[1] = np.array([[7,8,9],
                     [10,11,12]])

通過迭代第一個維度,我可以達到預期的結果,喜歡:

output = np.ndarray((2,6))
for n_port, port in enumerate(test1):
    output[:,n_port*3:(n_port+1)*3] = port  

這使:

array([[ 1.,  2.,  3.,  7.,  8.,  9.],
       [ 4.,  5.,  6., 10., 11., 12.]])

但我想知道是否有一種更流暢的方式來做到這一點。 重塑功能將是顯而易見的方法,但它會使它們變平,而不是並排堆疊它們:

test1.reshape((2,6))
array([[ 1.,  2.,  3.,  4.,  5.,  6.],
       [ 7.,  8.,  9., 10., 11., 12.]])

任何幫助感激不盡!

基於線程中描述的回溯思想: 直觀和將4D數組重塑為numpy中的2D數組的想法 ,您可以使用arr.transposearr.reshape的組合,如:

In [162]: dd = np.arange(1, 13).reshape(2, 2, 3)

In [163]: dd
Out[163]: 
array([[[ 1,  2,  3],
        [ 4,  5,  6]],

       [[ 7,  8,  9],
        [10, 11, 12]]])

In [164]: dd.transpose((1, 0, 2))
Out[164]: 
array([[[ 1,  2,  3],
        [ 7,  8,  9]],

       [[ 4,  5,  6],
        [10, 11, 12]]])

In [165]: dd.transpose((1, 0, 2)).reshape(2, -1)
Out[165]: 
array([[ 1,  2,  3,  7,  8,  9],
       [ 4,  5,  6, 10, 11, 12]])

你可以先做一個swapaxes() ,然后reshape()

test1.swapaxes(0,1).reshape(2,6)

暫無
暫無

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

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