2016-08-13 101 views
1

我有以下的數組:numpy的:沿指定軸線重塑陣列

x = np.arange(24).reshape((2,3,2,2)) 
array([[[[ 0, 1], 
    [ 2, 3]], 

    [[ 4, 5], 
    [ 6, 7]], 

    [[ 8, 9], 
    [10, 11]]], 


    [[[12, 13], 
    [14, 15]], 

    [[16, 17], 
    [18, 19]], 

    [[20, 21], 
    [22, 23]]]]) 

我想它重塑到(3,4,2)陣列象下面這樣:

array([[[ 0, 1], 
    [ 2, 3], 
    [12, 13], 
    [14, 15]], 

    [[ 4, 5], 
    [ 6, 7], 
    [16, 17], 
    [18, 19]], 

    [[ 8, 9], 
    [10, 11], 
    [20, 21], 
    [22, 23]]]) 

我試圖使用重塑,但它給了我以下這不是我想要的。

array([[[ 0, 1], 
    [ 2, 3], 
    [ 4, 5], 
    [ 6, 7]], 

    [[ 8, 9], 
    [10, 11], 
    [12, 13], 
    [14, 15]], 

    [[16, 17], 
    [18, 19], 
    [20, 21], 
    [22, 23]]]) 

有人可以幫忙嗎?

回答

1

使用transpose然後reshape像這樣 -

shp = x.shape 
out = x.transpose(1,0,2,3).reshape(shp[1],-1,shp[-1]) 
1
x = np.arange(24).reshape((2,3,2,2)) 
y = np.dstack(zip(x))[0] 
print y 

結果:

[[[ 0 1] 
    [ 2 3] 
    [12 13] 
    [14 15]] 

[[ 4 5] 
    [ 6 7] 
    [16 17] 
    [18 19]] 

[[ 8 9] 
    [10 11] 
    [20 21] 
    [22 23]]] 
+0

感謝朱利安。這工作正常。但是,出於性能方面的原因,我更喜歡使用本地numpy解決方案。 – Allen

+0

此函數將用於多次轉換大型numpy數組。我不確定zip是否針對這些陣列操作進行了優化。 – Allen

+0

那麼Divakar的建議有什麼問題? – Julien